Changeset 9984


Ignore:
Timestamp:
Jul 10, 2008, 9:52:43 AM (11 years ago)
Author:
gb
Message:

Use symbolic names for C arg registers, since Windows uses a
(very) different C ABI.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/working-0711/ccl/lisp-kernel/x86-asmutils64.s

    r7624 r9984  
    2020        _beginfile
    2121
    22 /* Flush %rsi cache lines, starting at address in %rdi.  Each line is */
    23 /*   assumed to be %rdx bytes wide. */
     22/* Flush %carg1 cache lines, starting at address in %carg0.  Each line is */
     23/*   assumed to be %carg2 bytes wide. */
    2424_exportfn(C(flush_cache_lines))
    25         __(cmpq $0,%rsi)
     25        __(cmpq $0,%carg1)
    2626        __(jmp 2f)
    27 1:      __(clflush (%rdi))
    28         __(addq %rdx,%rdi)
    29         __(subq $1,%rsi)
     271:      __(clflush (%carg0))
     28        __(addq %carg2,%carg0)
     29        __(subq $1,%carg1)
    30302:      __(jg 1b)       
    3131        __(repret)
     
    3333
    3434_exportfn(C(current_stack_pointer))
    35         __(movq %rsp,%rax)
     35        __(movq %rsp,%cret)
    3636        __(ret)
    3737_endfn
    3838
    3939_exportfn(C(touch_page))
    40         __(movq %rdi,(%rdi))
    41         __(movq $0,(%rdi))
    42         __(movl $1,%eax)
     40        __(movq %carg0,(%carg0))
     41        __(movq $0,(%carg0))
     42        __(movl $1,%cret_l)
    4343        .globl C(touch_page_end)
    4444C(touch_page_end):     
     
    4646                       
    4747_exportfn(C(count_leading_zeros))
    48         __(bsrq %rdi,%rax)
    49         __(xorq $63,%rax)
     48        __(bsrq %carg0,%cret)
     49        __(xorq $63,%cret)
    5050        __(ret)
    5151_endfn
     
    5656
    5757_exportfn(C(set_mxcsr))
    58         __(pushq %rdi)
     58        __(pushq %carg0)
    5959        __(ldmxcsr (%rsp))
    6060        __(addq $8,%rsp)
     
    6565        __(pushq $0)
    6666        __(stmxcsr (%rsp))
    67         __(popq %rax)
     67        __(popq %cret)
    6868        __(ret)
    6969_endfn
     
    7575_endfn                       
    7676
    77 /*  Atomically store new value (%rdx) in *%rdi, if old value == %rsi. */
     77/*  Atomically store new value (%carg2) in *%carg0, if old value == %carg1. */
    7878/*  Return actual old value. */
    7979_exportfn(C(store_conditional))
    80         __(mov %rsi,%rax)
     80        __(mov %carg1,%cret)
    8181        __(lock)
    82         __(cmpxchgq %rdx,(%rdi))
    83         __(cmovne %rdx,%rax)
     82        __(cmpxchgq %carg2,(%carg0))
     83        __(cmovne %carg2,%cret)
    8484        __(ret)
    8585_endfn
    8686
    87 /*      Atomically store new_value(%rsi) in *%rdi ;  return previous contents */
    88 /*      of *%rdi. */
     87/*      Atomically store new_value(%carg1) in *%carg0 ;  return previous contents */
     88/*      of *%carg0. */
    8989
    9090_exportfn(C(atomic_swap))
    9191        __(lock)
    92         __(xchg %rsi,(%rdi))
    93         __(mov %rsi,%rax)
    94         __(ret)
    95 _endfn
    96 
    97 /*        Logior the value in *%rdi with the value in %rsi (presumably a */
     92        __(xchg %carg1,(%carg0))
     93        __(mov %carg1,%cret)
     94        __(ret)
     95_endfn
     96
     97/*        Logior the value in *%carg0 with the value in %carg1 (presumably a */
    9898/*      bitmask with exactly 1 bit set.)  Return non-zero if any of */
    9999/*      the bits in that bitmask were already set. */
    100100_exportfn(C(atomic_ior))
    101 0:      __(movq (%rdi), %rax)
    102         __(movq %rax,%rcx)
    103         __(orq %rsi,%rcx)
     1010:      __(movq (%carg0),%cret)
     102        __(movq %cret,%carg2)
     103        __(orq %carg1,%carg2)
    104104        __(lock)
    105         __(cmpxchg %rcx,(%rdi))
     105        __(cmpxchg %carg2,(%carg0))
    106106        __(jnz 0b)
    107         __(andq %rsi,%rax)
    108         __(ret)
    109 _endfn
    110        
    111        
    112 /* Logand the value in *rdi with the value in rsi (presumably a bitmask with exactly 1 */
    113 /* bit set.)  Return the value now in *rdi (for some value of "now" */
     107        __(andq %carg1,%cret)
     108        __(ret)
     109_endfn
     110       
     111       
     112/* Logand the value in *carg0 with the value in carg1 (presumably a bitmask with exactly 1 */
     113/* bit set.)  Return the value now in *carg0 (for some value of "now" */
    114114
    115115_exportfn(C(atomic_and))
    116 0:      __(movq (%rdi), %rax)
    117         __(movq %rax,%rcx)
    118         __(and %rsi,%rcx)
     1160:      __(movq (%carg0),%cret)
     117        __(movq %cret,%carg2)
     118        __(and %carg1,%carg2)
    119119        __(lock)
    120         __(cmpxchg %rcx,(%rdi))
     120        __(cmpxchg %carg2,(%carg0))
    121121        __(jnz 0b)
    122         __(movq %rcx,%rax)
     122        __(movq %carg2,%cret)
    123123        __(ret)
    124124_endfn
     
    132132        __endif                       
    133133
    134 /* int cpuid (int code, int *pebx, int *pecx, int *pedx)  */
    135 /*                %rdi,     %rsi,      %rdx,      %rcx               */
     134/* int cpuid (natural code, natural *pebx, natural *pecx, natural *pedx)  */
    136135_exportfn(C(cpuid))
    137         __(pushq %rdx)          /* pecx */
    138         __(pushq %rcx)          /* pedx */
    139         __(pushq %rbx)          /* %rbx is non-volatile */
    140         __(movq %rdi,%rax)
    141         __(xorl %ecx,%ecx)
     136        __(pushq %carg2)
     137        __(pushq %carg3)
     138        __(movq %carg1, %ctemp0)
     139        __(pushq %rbx)          /* non-volatile reg, clobbered by CPUID */
     140        __(movq %carg0, %rax)
     141        __(xorq %rcx,%rcx)
    142142        __(cpuid)
    143         __(movl %ebx,(%rsi))
     143        __(movq %rbx,(%ctemp0))
    144144        __(popq %rbx)
    145         __(popq %rsi)           /* recover pedx */
    146         __(movl %edx,(%rsi))
    147         __(popq %rsi)           /* recover pecx */
    148         __(movl %ecx,(%rsi))
     145        __(popq %ctemp0)           /* recover pedx */
     146        __(movq %rdx,(%ctemp0))
     147        __(popq %ctemp0)                /* recover pecx */
     148        __(movq %rcx,(%ctemp0))
    149149        __(ret)
    150150_endfn
     
    153153/*   Not fully general, but should get us off of the signal stack */
    154154_exportfn(C(switch_to_foreign_stack))
    155         __(movq %rdi,%rsp)
    156         __(movq %rsi,%rax)
    157         __(movq %rdx,%rdi)
    158         __(movq %rcx,%rsi)
    159         __(movq %r8,%rdx)
    160         __(movq %r9,%rcx)
     155        __ifdef([WINDOWS])
     156        __(movq 8(%rsp), %ctemp0)
     157        __(movq 16(%rsp), %ctemp1)
     158        __endif
     159        __(movq %carg0,%rsp)
     160        __(movq %carg1,%rax)
     161        __(movq %carg2,%carg0)
     162        __(movq %carg3,%carg1)
     163        __ifdef([WINDOWS])
     164        __(movq %ctemp0, %carg2)
     165        __(movq %ctemp1, %carg3)
     166        __else
     167        __(movq %carg4,%carg2)
     168        __(movq %carg5,%carg3)
     169        __endif
    161170        __(jmp *%rax)
    162171_endfn
     
    173182       
    174183        __ifdef([DARWIN_GS_HACK])
    175 /* Check (in and ugly, non-portable way) to see if %gs is addressing
     184/* Check (in an ugly, non-portable way) to see if %gs is addressing
    176185   pthreads data.  If it was, return 0; otherwise, assume that it's
    177186   addressing a lisp tcr and set %gs to point to the tcr's tcr.osid,
Note: See TracChangeset for help on using the changeset viewer.