
This file records register use conventions and info for the 4
supported platforms (since it is ABI dependent).  This is so as to
avoid having to endlessly re-look up this info in ABI documents.

                      -----------------------

x86-linux
~~~~~~~~~

Reg        Callee      Arg   
Name       Saves?      Reg?     Comment              Vex-uses?
--------------------------------------------------------------
eax        n           n        int[31:0] retreg     y
ebx        y           n                             y
ecx        n           n                             y
edx        n           n        int[63:32] retreg    y
esi        y           n                             y
edi        y           n                             y
ebp        y           n                             & guest state
esp        reserved    n/a                           n/a
eflags     n           n/a                           y
st0        n ?         n        fp retreg            y
st1-7      n ?         n                             y
xmm0-7     n ?         n                             y

In the case where arguments are passed in registers, the arg1,2,3
registers are EAX, EDX, and ECX respectively.


amd64-linux
~~~~~~~~~~~

Reg        Callee      Arg    
Name       Saves?      Reg?     Comment              Vex-uses?
-------------------------------------------------------------------
rax        n           n        int[63:0] retreg
rbx        y           n                             y
rcx        n           int#4
rdx        n           int#3    int[127:64] retreg
rsi        n           int#2                         y
rdi        n           int#1                         y
rbp        y           n                             & guest state
rsp        reserved    n/a                           n/a
r8         n           int#5                         y
r9         n           int#6                         y
r10        n ?
r11        n                                         jmp temporary
r12-15     y                                         y
eflags     n           n/a                           y
st0-7      n           n        long double retreg   y
xmm0       n           fp#1     fp retreg
xmm1       n           fp#2     fp-high retreg
xmm2-7     n           fp#3-8                        y (3-7)
xmm8-15    n                                         y (8-12)


ppc32-linux
~~~~~~~~~~~

Reg        Callee      Arg    
Name       Saves?      Reg?     Comment              Vex-uses?
-------------------------------------------------------------------
r0         n           n        sometimes RAZ
r1         y           n        stack pointer
r2         n           n
r3         n           int#1    int[31:0] retreg     y
r4         n           int#2    also int retreg      y
r5         n           int#3                         y
r6         n           int#4                         y
r7         n           int#5                         y
r8         n           int#6                         y
r9         n           int#7                         y
r10        n           int#8                         y
r11        n                                         y
r12        n                                         y
r13        ?
r14-28     y                                         y
r29        y                                reserved for dispatcher
r30        y                                altivec spill temporary
r31        y                                         & guest state
f0         n
f1         n           fp#1     fp retreg
f2-8       n           fp#2-8
f9-13      n
f14-31     y                                         y (14-21)
v0-v19     ?
v20-31     y                                         y (20-27,29)
cr0-7
lr         y                    return address
ctr        n
xer        n
fpscr


ppc64-linux
~~~~~~~~~~~
TBD


arm-linux
~~~~~~~~~

Reg        Callee      Arg
Name       Saves?      Reg?     Comment              Vex-uses?
--------------------------------------------------------------
r0                     int#1    int[31:0] retreg?    avail
r1                     int#2    int[63:32] retreg?   avail
r2                     int#3                         avail
r3                     int#4                         avail
r4         y                                         avail
r5         y                                         avail
r6         y                                         avail
r7         y                                         avail
r8         y                                         GSP
r9         y (but only on Linux; not in general)     avail
r10        y                                         avail
r11        y                                         avail
r12                         possibly used by linker? unavail
r13(sp)                                              unavail
r14(lr)                                              unavail
r15(pc)                                              unavail

VFP: d8-d15 are callee-saved
r12 (IP) is probably available for use as a caller-saved
register; but instead we use it as an intermediate for
holding the address for F32/F64 spills, since the VFP load/store
insns have reg+offset forms for offsets only up to 1020, which
often isn't enough.


s390x-linux
~~~~~~~~~~~

Reg        Callee      Arg
Name       Saves?      Reg?     Comment              Vex-uses?
--------------------------------------------------------------
r0         n                    see below            unavail
r1         n                                         avail
r2         n           int#1    return value         avail
r3         n           int#2                         avail
r4         n           int#3                         avail
r5         n           int#4                         avail
r6         y           int#5                         avail
r7         y                                         avail
r8         y                                         avail
r9         y                                         avail
r10        y                    see below            avail
r11        y                    see below            avail
r12        y                                         unavail VG_(dispatch_ctr)
r13        y                                         unavail gsp
r14(lr)    n                                         unavail lr
r15(sp)    y                                         unavail sp

f0         n                    return value         avail
f1-f7      n                                         avail
f8-f11     y                                         avail
f12-f15    y                    see below            avail

When r0 is used as a base or index register its contents is
ignored and the value 0 is used instead. This is the reason
why VEX cannot use it.

r10, r11 as well as f12-f15 are used as real regs during insn
selection when register pairs are required.


ppc32-aix5
~~~~~~~~~~

Reg        Callee      Arg    
Name       Saves?      Reg?     Comment              Vex-uses?
-------------------------------------------------------------------
r0         n           n        sometimes RAZ
r1         y           n        stack pointer
r2         n           n        TOC pointer
r3         n           int#1    int[31:0] retreg     y
r4         n           int#2    also int retreg      y
r5         n           int#3                         y
r6         n           int#4                         y
r7         n           int#5                         y
r8         n           int#6                         y
r9         n           int#7                         y
r10        n           int#8                         y
r11        n                    "env pointer?!"      y
r12        n                    "exn handling"       y
r13        ?                    "reserved in 64-bit env"
r14-28     y                                         y
r29        y                                reserved for dispatcher
r30        y                                altivec spill temporary
r31        y                                         & guest state
f0         n
f1         n           fp#1     fp retreg
f2-13      n           fp#2-13  
f14-31     y                                         y (14-21)
v0-v19     ?
v20-31     y                                         y (20-27,29)
cr0-7
lr         y                    return address
ctr        n
xer        n
fpscr
