Re: [Sablevm-developer] Porting SableVM to ARM: Questions
Brought to you by:
egagnon
From: Archie C. <ar...@de...> - 2003-01-03 17:45:08
|
Gunda Domlur wrote: > Now I am back after the holidays to look at the problem of making the > inlined version working on ARM. I happen to have been working with ARM assembly lately, on an unrelated project. One thing that may present difficulties for SableVM inline threading is the way that immediate values are handled. The ARM instruction set does not allow loading of arbitrary immediate values; to typically such values are stored in a 'literals' pool at the end of whatever function, etc. you are assembling or compiling, and then they are loaded using a PC-relative instruction. This means that if you move the code, but don't move the literals, it won't work. Moreover, it's hard to predict when the compiler is going to do this, because some constants can be loaded as immediate values (specifically, those that can be represented as an 8-bit value shifted an even number of bits, or the ones complement of such a value). Here's an example. Consider this C code: extern int x; extern int y; void foo() { x = 0xff000000; /* can be loaded as immediate */ y = 0x12345678; /* cannot be loaded as immediate */ } Here's what GCC outputs: .file "foo.c" .text .align 2 .global foo .type foo,function foo: @ args = 0, pretend = 0, frame = 0 @ frame_needed = 0, uses_anonymous_args = 0 @ link register save eliminated. ldr r3, .L2 mov r2, #-16777216 ldr r1, .L2+4 str r2, [r3, #0] ldr r3, .L2+8 @ lr needed for prologue str r1, [r3, #0] bx lr .L3: .align 2 .L2: .word x .word 305419896 .word y .Lfe1: .size foo,.Lfe1-foo .ident "GCC: (GNU) 3.2" Note that the 0x12345678 (305419896) constant is stored in the literal pool (starting at .L2) but the 0xff000000 (-16777216) constant is not. The latter is 'relocatable' but the former is not. So this is going to be tricky to predict which instructions are inlinable; it also depends on how the compiler compiles code. -Archie __________________________________________________________________________ Archie Cobbs * Packet Design * http://www.packetdesign.com |