label.S - vx32 - Local 9vx git repository for patches.
 (HTM) git clone git://r-36.net/vx32
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       label.S (1259B)
       ---
            1 #ifdef __APPLE__
            2 #define EXT(s) _ ## s
            3 #else
            4 #define EXT(s) s
            5 #endif
            6 
            7 #ifdef i386
            8 
            9 .globl EXT(setlabel)
           10 EXT(setlabel):
           11         movl        4(%esp), %eax
           12         
           13         movl %ebp, 0(%eax)
           14         movl %ebx, 8(%eax)
           15         movl %esi, 16(%eax)
           16         movl %edi, 24(%eax)
           17         movl %esp, 32(%eax)
           18 
           19         movl 0(%esp), %ecx
           20         movl %ecx, 40(%eax)
           21         
           22         movl $0, %eax
           23         ret
           24 
           25 .globl EXT(gotolabel)
           26 EXT(gotolabel):
           27         movl        4(%esp), %eax
           28         
           29         movl 0(%eax), %ebp
           30         movl 8(%eax), %ebx
           31         movl 16(%eax), %esi
           32         movl 24(%eax), %edi
           33         movl 32(%eax), %esp
           34         
           35         movl 40(%eax), %ecx
           36         movl %ecx, 0(%esp)
           37         
           38         movl $1, %eax
           39         ret
           40 
           41 #else
           42 
           43 // first param is %rdi
           44 // need to save %rbp, %rbx, %rsp, %rip, %r12-%r15.
           45 // %rsi and %rdi are not callee-save, unlike i386.
           46 
           47 .globl EXT(setlabel)
           48 EXT(setlabel):
           49         movq %rbp, 0(%rdi)
           50         movq %rbx, 8(%rdi)
           51         // 16(%rdi) is saved si (not used)
           52         // 24(%rdi) is saved di (not used)
           53         movq %rsp, 32(%rdi)
           54         movq 0(%rsp), %rax
           55         movq %rax, 40(%rdi)        // %rip
           56         movq %r12, 48(%rdi)
           57         movq %r13, 56(%rdi)
           58         movq %r14, 64(%rdi)
           59         movq %r15, 72(%rdi)
           60         movq $0, %rax
           61         ret
           62 
           63 .globl EXT(gotolabel)
           64 EXT(gotolabel):
           65         movq 0(%rdi), %rbp
           66         movq 8(%rdi), %rbx
           67         movq 32(%rdi), %rsp
           68         movq 40(%rdi), %rax
           69         movq %rax, 0(%rsp)        // %rip
           70         movq 48(%rdi), %r12
           71         movq 56(%rdi), %r13
           72         movq 64(%rdi), %r14
           73         movq 72(%rdi), %r15
           74         movq $1, %rax
           75         cld
           76         ret
           77 
           78 #endif