1 2This file records register use conventions and info for the 4 3supported platforms (since it is ABI dependent). This is so as to 4avoid having to endlessly re-look up this info in ABI documents. 5 6 ----------------------- 7 8x86-linux 9~~~~~~~~~ 10 11Reg Callee Arg 12Name Saves? Reg? Comment Vex-uses? 13-------------------------------------------------------------- 14eax n n int[31:0] retreg y 15ebx y n y 16ecx n n y 17edx n n int[63:32] retreg y 18esi y n y 19edi y n y 20ebp y n & guest state 21esp reserved n/a n/a 22eflags n n/a y 23st0 n ? n fp retreg y 24st1-7 n ? n y 25xmm0-7 n ? n y 26 27In the case where arguments are passed in registers, the arg1,2,3 28registers are EAX, EDX, and ECX respectively. 29 30 31amd64-linux 32~~~~~~~~~~~ 33 34Reg Callee Arg 35Name Saves? Reg? Comment Vex-uses? 36------------------------------------------------------------------- 37rax n n int[63:0] retreg 38rbx y n y 39rcx n int#4 40rdx n int#3 int[127:64] retreg 41rsi n int#2 y 42rdi n int#1 y 43rbp y n & guest state 44rsp reserved n/a n/a 45r8 n int#5 y 46r9 n int#6 y 47r10 n ? 48r11 n jmp temporary 49r12-15 y y 50eflags n n/a y 51st0-7 n n long double retreg y 52xmm0 n fp#1 fp retreg 53xmm1 n fp#2 fp-high retreg 54xmm2-7 n fp#3-8 y (3-7) 55xmm8-15 n y (8-12) 56 57 58ppc32-linux 59~~~~~~~~~~~ 60 61Reg Callee Arg 62Name Saves? Reg? Comment Vex-uses? 63------------------------------------------------------------------- 64r0 n n sometimes RAZ 65r1 y n stack pointer 66r2 n n 67r3 n int#1 int[31:0] retreg y 68r4 n int#2 also int retreg y 69r5 n int#3 y 70r6 n int#4 y 71r7 n int#5 y 72r8 n int#6 y 73r9 n int#7 y 74r10 n int#8 y 75r11 n y 76r12 n y 77r13 ? 78r14-28 y y 79r29 y reserved for dispatcher 80r30 y altivec spill temporary 81r31 y & guest state 82f0 n 83f1 n fp#1 fp retreg 84f2-8 n fp#2-8 85f9-13 n 86f14-31 y y (14-21) 87v0-v19 ? 88v20-31 y y (20-27,29) 89cr0-7 90lr y return address 91ctr n 92xer n 93fpscr 94 95 96ppc64-linux 97~~~~~~~~~~~ 98TBD 99 100 101arm-linux 102~~~~~~~~~ 103 104Reg Callee Arg 105Name Saves? Reg? Comment Vex-uses? 106-------------------------------------------------------------- 107r0 int#1 int[31:0] retreg? avail 108r1 int#2 int[63:32] retreg? avail 109r2 int#3 avail 110r3 int#4 avail 111r4 y avail 112r5 y avail 113r6 y avail 114r7 y avail 115r8 y GSP 116r9 y (but only on Linux; not in general) avail 117r10 y avail 118r11 y avail 119r12 possibly used by linker? unavail 120r13(sp) unavail 121r14(lr) unavail 122r15(pc) unavail 123 124VFP: d8-d15 are callee-saved 125r12 (IP) is probably available for use as a caller-saved 126register; but instead we use it as an intermediate for 127holding the address for F32/F64 spills, since the VFP load/store 128insns have reg+offset forms for offsets only up to 1020, which 129often isn't enough. 130 131 132s390x-linux 133~~~~~~~~~~~ 134 135Reg Callee Arg 136Name Saves? Reg? Comment Vex-uses? 137-------------------------------------------------------------- 138r0 n see below unavail 139r1 n avail 140r2 n int#1 return value avail 141r3 n int#2 avail 142r4 n int#3 avail 143r5 n int#4 avail 144r6 y int#5 avail 145r7 y avail 146r8 y avail 147r9 y avail 148r10 y see below avail 149r11 y see below avail 150r12 y unavail VG_(dispatch_ctr) 151r13 y unavail gsp 152r14(lr) n unavail lr 153r15(sp) y unavail sp 154 155f0 n return value avail 156f1-f7 n avail 157f8-f11 y avail 158f12-f15 y see below avail 159 160When r0 is used as a base or index register its contents is 161ignored and the value 0 is used instead. This is the reason 162why VEX cannot use it. 163 164r10, r11 as well as f12-f15 are used as real regs during insn 165selection when register pairs are required. 166 167 168ppc32-aix5 169~~~~~~~~~~ 170 171Reg Callee Arg 172Name Saves? Reg? Comment Vex-uses? 173------------------------------------------------------------------- 174r0 n n sometimes RAZ 175r1 y n stack pointer 176r2 n n TOC pointer 177r3 n int#1 int[31:0] retreg y 178r4 n int#2 also int retreg y 179r5 n int#3 y 180r6 n int#4 y 181r7 n int#5 y 182r8 n int#6 y 183r9 n int#7 y 184r10 n int#8 y 185r11 n "env pointer?!" y 186r12 n "exn handling" y 187r13 ? "reserved in 64-bit env" 188r14-28 y y 189r29 y reserved for dispatcher 190r30 y altivec spill temporary 191r31 y & guest state 192f0 n 193f1 n fp#1 fp retreg 194f2-13 n fp#2-13 195f14-31 y y (14-21) 196v0-v19 ? 197v20-31 y y (20-27,29) 198cr0-7 199lr y return address 200ctr n 201xer n 202fpscr 203