Changeset 9991


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

Use () in macroexpansions.

File:
1 edited

Legend:

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

    r8040 r9991  
    2020                                       
    2121define([ref_global],[
    22         mov lisp_global($1),$2
     22        __(mov lisp_global($1),$2)
    2323])
    2424
    2525define([set_global],[
    26         mov $1,lisp_global($2)
     26        __(mov $1,lisp_global($2))
    2727])
    2828
    2929define([ref_nrs_value],[
    30         mov nrs.$1+symbol.vcell,$2
     30        __(mov nrs.$1+symbol.vcell,$2)
    3131])
    3232       
    3333define([set_nrs_value],[
    34         mov $1,nrs.$2+symbol.vcell
     34        __(mov $1,nrs.$2+symbol.vcell)
    3535])
    3636                                                       
    3737define([unbox_fixnum],[
    38         mov $1,$2
    39         sar [$]fixnumshift,$2
     38        __(mov $1,$2)
     39        __(sar [$]fixnumshift,$2)
    4040])
    4141
    4242define([box_fixnum],[
    43         imulq [$]fixnumone,$1,$2
     43        __(imulq [$]fixnumone,$1,$2)
    4444])     
    4545
     
    4747/* box_fixnum, with no effect on flags */
    4848define([box_fixnum_no_flags],[
    49         leaq (,$1,8),$2
     49        __(leaq (,$1,8),$2)
    5050])
    5151                               
    52 define([save_node_regs],[
    53         push %arg_z
    54         push %arg_y
    55         push %arg_x
    56         push %temp0
    57         push %temp1
    58         push %temp2
    59         push %save0
    60         push %save1
    61         push %save2
    62         push %save3
    63         push %ra0
    64         push %fn
    65 ])
    66 
    67 /* This needs to be done before we transition back to the lisp stack  */
    68 /* from the foreign stack.   */
    69                
    70 define([zero_node_regs],[
    71         xor %fn,%fn
    72         mov %fn,%ra0
    73         mov %fn,%save3
    74         mov %fn,%save2
    75         mov %fn,%save1
    76         mov %fn,%save0
    77         mov %fn,%temp2
    78         mov %fn,%temp1
    79         mov %fn,%temp0
    80         mov %fn,%arg_x
    81         mov %fn,%arg_y
    82         mov %fn,arg_z
    83 ])     
    84 define([restore_node_regs],[
    85         pop %fn
    86         pop %ra0
    87         pop %save3
    88         pop %save2
    89         pop %save1
    90         pop %save0
    91         pop %temp2
    92         pop %temp1
    93         pop %temp0
    94         pop %arg_x
    95         pop %arg_y
    96         pop %arg_z
    97 ])     
    9852
    9953/* Zero $3 bytes worth of dnodes, starting at offset $2 relative  */
     
    10458        .macro zero_dnodes
    10559        .if $2
    106         movapd %fpzero,$1($0)
    107         zero_dnodes $0,$1+dnode_size,$2-dnode_size
     60        __(movapd %fpzero,$1($0))
     61        __(zero_dnodes $0,$1+dnode_size,$2-dnode_size)
    10862        .endif
    10963        .endmacro
     
    11165        .macro zero_dnodes base,disp,nbytes
    11266        .ifgt \nbytes
    113         movapd %fpzero,\disp(\base)
     67        movapd %fpzero,\disp(\base)
    11468        zero_dnodes \base,"\disp+dnode_size","\nbytes-dnode_size"
    11569        .endif
     
    12377define([TSP_Alloc_Fixed],[
    12478        define([TSP_Alloc_Size],[((($1+node_size) & ~(dnode_size-1))+dnode_size)])
    125         subq [$]TSP_Alloc_Size,%rcontext:tcr.next_tsp
    126         movq %rcontext:tcr.save_tsp,%stack_temp
    127         movq %rcontext:tcr.next_tsp,$2
     79        __(subq [$]TSP_Alloc_Size,rcontext(tcr.next_tsp))
     80        __(movq rcontext(tcr.save_tsp),%stack_temp)
     81        __(movq rcontext(tcr.next_tsp),$2)
    12882        zero_dnodes $2,0,TSP_Alloc_Size
    129         movq %stack_temp,($2)
    130         movq %rbp,tsp_frame.save_rbp($2)
    131         movq $2,%rcontext:tcr.save_tsp
     83        __(movq %stack_temp,($2))
     84        __(movq %rbp,tsp_frame.save_rbp($2))
     85        __(movq $2,rcontext(tcr.save_tsp))
    13286        undefine([TSP_Alloc_Size])
    13387])
     
    13892define([TSP_Alloc_Var],[
    13993        new_macro_labels()
    140         subq $1,%rcontext:tcr.next_tsp
    141         movq %rcontext:tcr.save_tsp,%stack_temp
    142         movq %rcontext:tcr.next_tsp,$2
    143         jmp macro_label(test)
     94        subq $1,rcontext(tcr.next_tsp)
     95        __(movq rcontext(tcr.save_tsp),%stack_temp)
     96        __(movq rcontext(tcr.next_tsp),$2)
     97        __(jmp macro_label(test))
    14498macro_label(loop):
    145         movapd %fpzero,0($2)
    146         addq $dnode_size,$2
     99        __(movapd %fpzero,0($2))
     100        __(addq $dnode_size,$2)
    147101macro_label(test):     
    148         subq $dnode_size,$1
    149         jge macro_label(loop)
    150         movq %rcontext:tcr.next_tsp,$2
    151         movd %stack_temp,$1
    152         movq $1,($2)
    153         movq %rbp,tsp_frame.save_rbp($2)
    154         movq $2,%rcontext:tcr.save_tsp
    155         addq $dnode_size,$2
     102        __(subq $dnode_size,$1)
     103        __(jge macro_label(loop))
     104        __(movq rcontext(tcr.next_tsp),$2)
     105        __(movd %stack_temp,$1)
     106        __(movq $1,($2))
     107        __(movq %rbp,tsp_frame.save_rbp($2))
     108        __(movq $2,rcontext(tcr.save_tsp))
     109        __(addq $dnode_size,$2)
    156110])
    157111       
     
    160114define([Allocate_Catch_Frame],[
    161115        TSP_Alloc_Fixed(catch_frame.size,$1)
    162         movq [$](catch_frame.element_count<<subtag_shift)|subtag_catch_frame,dnode_size($1)
    163         addq [$]dnode_size+fulltag_misc,$1
     116        __(movq [$](catch_frame.element_count<<subtag_shift)|subtag_catch_frame,dnode_size($1))
     117        __(addq [$]dnode_size+fulltag_misc,$1)
    164118])
    165119
     
    168122define([Make_Catch],[
    169123        Allocate_Catch_Frame(%imm2)
    170         movq %rcontext:tcr.catch_top,%imm0
    171         movq %rcontext:tcr.db_link,%imm1
    172         movq %arg_z,catch_frame.catch_tag(%imm2)
    173         movq %imm0,catch_frame.link(%imm2)
    174         movq [$]$1,catch_frame.mvflag(%imm2)
    175         movq %rcontext:tcr.xframe,%imm0
    176         movq %rsp,catch_frame.rsp(%imm2)
    177         movq %rbp,catch_frame.rbp(%imm2)
    178         movq %rcontext:tcr.foreign_sp,%stack_temp
    179         movq %imm1,catch_frame.db_link(%imm2)
    180         movq %save3,catch_frame._save3(%imm2)
    181         movq %save2,catch_frame._save2(%imm2)
    182         movq %save1,catch_frame._save1(%imm2)
    183         movq %save0,catch_frame._save0(%imm2)
    184         movq %imm0,catch_frame.xframe(%imm2)
    185         movq %stack_temp,catch_frame.foreign_sp(%imm2)
    186         movq %xfn,catch_frame.pc(%imm2)
    187         movq %imm2,%rcontext:tcr.catch_top
     124        __(movq rcontext(tcr.catch_top),%imm0)
     125        __(movq rcontext(tcr.db_link),%imm1)
     126        __(movq %arg_z,catch_frame.catch_tag(%imm2))
     127        __(movq %imm0,catch_frame.link(%imm2))
     128        __(movq [$]$1,catch_frame.mvflag(%imm2))
     129        __(movq rcontext(tcr.xframe),%imm0)
     130        __(movq %rsp,catch_frame.rsp(%imm2))
     131        __(movq %rbp,catch_frame.rbp(%imm2))
     132        __(movq rcontext(tcr.foreign_sp),%stack_temp)
     133        __(movq %imm1,catch_frame.db_link(%imm2))
     134        __ifndef([WINDOWS])
     135        __(movq %save3,catch_frame._save3(%imm2))
     136        __endif
     137        __(movq %save2,catch_frame._save2(%imm2))
     138        __(movq %save1,catch_frame._save1(%imm2))
     139        __(movq %save0,catch_frame._save0(%imm2))
     140        __(movq %imm0,catch_frame.xframe(%imm2))
     141        __(movq %stack_temp,catch_frame.foreign_sp(%imm2))
     142        __(movq %xfn,catch_frame.pc(%imm2))
     143        __(movq %imm2,rcontext(tcr.catch_top))
    188144])     
    189145
    190146define([nMake_Catch],[
    191147        Allocate_Catch_Frame(%imm2)
    192         movq %rcontext:tcr.catch_top,%imm0
    193         movq %rcontext:tcr.db_link,%imm1
    194         movq %arg_z,catch_frame.catch_tag(%imm2)
    195         movq %imm0,catch_frame.link(%imm2)
    196         lea node_size(%rsp),%imm0
    197         movq [$]$1,catch_frame.mvflag(%imm2)
    198         movq %imm0,catch_frame.rsp(%imm2)
    199         movq %rcontext:tcr.xframe,%imm0
    200         movq %rbp,catch_frame.rbp(%imm2)
    201         movq %rcontext:tcr.foreign_sp,%stack_temp
    202         movq %imm1,catch_frame.db_link(%imm2)
    203         movq %save3,catch_frame._save3(%imm2)
    204         movq %save2,catch_frame._save2(%imm2)
    205         movq %save1,catch_frame._save1(%imm2)
    206         movq %save0,catch_frame._save0(%imm2)
    207         movq %imm0,catch_frame.xframe(%imm2)
    208         movq %stack_temp,catch_frame.foreign_sp(%imm2)
    209         movq %xfn,catch_frame.pc(%imm2)
    210         movq %imm2,%rcontext:tcr.catch_top
     148        __(movq rcontext(tcr.catch_top),%imm0)
     149        __(movq rcontext(tcr.db_link),%imm1)
     150        __(movq %arg_z,catch_frame.catch_tag(%imm2))
     151        __(movq %imm0,catch_frame.link(%imm2))
     152        __(lea node_size(%rsp),%imm0)
     153        __(movq [$]$1,catch_frame.mvflag(%imm2))
     154        __(movq %imm0,catch_frame.rsp(%imm2))
     155        __(movq rcontext(tcr.xframe),%imm0)
     156        __(movq %rbp,catch_frame.rbp(%imm2))
     157        __(movq rcontext(tcr.foreign_sp),%stack_temp)
     158        __(movq %imm1,catch_frame.db_link(%imm2))
     159        __ifndef([WINDOWS])
     160        __(movq %save3,catch_frame._save3(%imm2))
     161        __endif
     162        __(movq %save2,catch_frame._save2(%imm2))
     163        __(movq %save1,catch_frame._save1(%imm2))
     164        __(movq %save0,catch_frame._save0(%imm2))
     165        __(movq %imm0,catch_frame.xframe(%imm2))
     166        __(movq %stack_temp,catch_frame.foreign_sp(%imm2))
     167        __(movq %xfn,catch_frame.pc(%imm2))
     168        __(movq %imm2,rcontext(tcr.catch_top))
    211169])     
    212170               
     
    229187/* to interrupt; the interrupting code has to recognize and possibly  */
    230188/* emulate the instructions in between   */
    231         subq $cons.size-fulltag_cons,%rcontext:tcr.save_allocptr
    232         movq %rcontext:tcr.save_allocptr,%allocptr
    233         rcmpq(%allocptr,%rcontext:tcr.save_allocbase)
    234         jg macro_label(no_trap)
     189        __(subq $cons.size-fulltag_cons,rcontext(tcr.save_allocptr))
     190        __(movq rcontext(tcr.save_allocptr),%allocptr)
     191        __(rcmpq(%allocptr,rcontext(tcr.save_allocbase)))
     192        __(jg macro_label(no_trap))
    235193        uuo_alloc()
    236194macro_label(no_trap):   
    237         andb $~fulltagmask,%rcontext:tcr.save_allocptr
     195        __(andb $~fulltagmask,rcontext(tcr.save_allocptr))
    238196/* Easy to interrupt now that tcr.save_allocptr isn't tagged as a cons    */
    239         movq $2,cons.cdr(%allocptr)
    240         movq $1,cons.car(%allocptr)
     197        __(movq $2,cons.cdr(%allocptr))
     198        __(movq $1,cons.car(%allocptr))
    241199        ifelse($3,[],[],[
    242          movq %allocptr,$3
     200         __(movq %allocptr,$3)
    243201        ])
    244202])
     
    248206
    249207define([Misc_Alloc],[
    250         subq [$]fulltag_misc,%imm1
     208        __(subq [$]fulltag_misc,%imm1)
    251209        Misc_Alloc_Internal($1)
    252210])
     
    257215               
    258216        new_macro_labels()
    259         subq %imm1,%rcontext:tcr.save_allocptr
    260         movq %rcontext:tcr.save_allocptr,%allocptr
    261         rcmpq(%allocptr,%rcontext:tcr.save_allocbase)
    262         jg macro_label(no_trap)
     217        __(subq %imm1,rcontext(tcr.save_allocptr))
     218        __(movq rcontext(tcr.save_allocptr),%allocptr)
     219        __(rcmpq(%allocptr,rcontext(tcr.save_allocbase)))
     220        __(jg macro_label(no_trap))
    263221        uuo_alloc()
    264222macro_label(no_trap):   
    265         movq %imm0,misc_header_offset(%allocptr)
    266         andb $~fulltagmask,%rcontext:tcr.save_allocptr
     223        __(movq %imm0,misc_header_offset(%allocptr))
     224        __(andb $~fulltagmask,rcontext(tcr.save_allocptr))
    267225/* Now that tcr.save_allocptr is untagged, it's easier to be interrupted   */
    268226        ifelse($1,[],[],[
    269          mov %allocptr,$1
     227         __(mov %allocptr,$1)
    270228        ])
    271229])
    272230       
    273231define([Misc_Alloc_Fixed],[
    274         movq [$]$2-fulltag_misc,%imm1
     232        __(movq [$]$2-fulltag_misc,%imm1)
    275233        Misc_Alloc_Internal($1)
    276234])                                     
    277235
    278236define([vrefr],[
    279         mov misc_data_offset+($3<<word_shift)($2),$1
     237        __(mov misc_data_offset+($3<<word_shift)($2),$1)
    280238])     
    281239
    282240define([jump_fn],[
    283         jmpq *%fn
     241        __(jmpq *%fn)
    284242])
    285243                       
    286244define([jump_fname],[
    287         mov symbol.fcell(%fname),%fn
     245        __(mov symbol.fcell(%fname),%fn)
    288246        jump_fn()
    289247])     
    290248       
    291249define([set_nargs],[
    292         movw [$]$1<<fixnumshift,%nargs
    293 ])
     250        ifelse(eval($1>15),1,[
     251        __(movl [$]$1<<fixnumshift,%nargs)
     252        ],[
     253        __(xorl %nargs,%nargs)
     254        ifelse(eval($1),0,[],[
     255        __(addl [$]$1<<fixnumshift,%nargs)
     256        ])])])
     257       
     258
    294259
    295260/* $1 = ndigits.  Assumes 4-byte digits           */
     
    298263
    299264define([_car],[
    300         movq cons.car($1),$2
     265        __(movq cons.car($1),$2)
    301266])     
    302267
    303268define([_rplaca],[
    304         movq $2,cons.car($1)
     269        __(movq $2,cons.car($1))
    305270])     
    306271               
    307272define([_cdr],[
    308         movq cons.cdr($1),$2
     273        __(movq cons.cdr($1),$2)
    309274])
    310275
    311276define([_rplacd],[
    312         movq $2,cons.cdr($1)
     277        __(movq $2,cons.cdr($1))
    313278])     
    314279               
     
    327292define([do_funcall],[
    328293        new_macro_labels()
    329         movb %temp0_b,%imm0_b
    330         andb $fulltagmask,%imm0_b
    331         cmpb $fulltag_symbol,%imm0_b
     294        __(movb %temp0_b,%imm0_b)
     295        __(andb $fulltagmask,%imm0_b)
     296        __(cmpb $fulltag_symbol,%imm0_b)
    332297        /* %fname == %temp0   */
    333         cmovgq %temp0,%fn
     298        __(cmovgq %temp0,%fn)
    334299        jl macro_label(bad)
    335         cmoveq symbol.fcell(%fname),%fn
    336         jmp *%fn
     300        __(cmoveq symbol.fcell(%fname),%fn)
     301        __(jmp *%fn)
    337302macro_label(bad):               
    338303        __(uuo_error_not_callable)
     
    340305
    341306define([getvheader],[
    342         movq misc_header_offset($1),$2
     307        __(movq misc_header_offset($1),$2)
    343308])
    344309
     
    346311/*    both be immediate registers   */
    347312define([header_size],[
    348         movq $1,$2
    349         shr $num_subtag_bits,$2
     313        __(movq $1,$2)
     314        __(shr $num_subtag_bits,$2)
    350315])
    351316
    352317/* $2 (length) is fixnum element-count.   */
    353318define([header_length],[
    354         movq $~255,$2
    355         andq $1,$2
    356         shr $num_subtag_bits-fixnumshift,$2
     319        __(movq $~255,$2)
     320        __(andq $1,$2)
     321        __(shr $num_subtag_bits-fixnumshift,$2)
    357322])
    358323
     
    365330/* $1 = vector, $2 = dest   */
    366331define([vector_length],[                                 
    367         movq $~255,$2
    368         andq misc_header_offset($1),$2
    369         shr $num_subtag_bits-fixnumshift,$2
     332        __(movq $~255,$2)
     333        __(andq misc_header_offset($1),$2)
     334        __(shr $num_subtag_bits-fixnumshift,$2)
    370335])
    371336               
    372337/* GAS/ATT comparison arg order drives me nuts   */
    373338define([rcmpq],[
    374         cmpq $2,$1
     339        __(cmpq $2,$1)
    375340])
    376341
    377342define([rcmpl],[
    378         cmpl $2,$1
     343        __(cmpl $2,$1)
    379344])     
    380345
    381346define([rcmpw],[
    382         cmpw $2,$1
     347        __(cmpw $2,$1)
    383348])     
    384349
    385350define([rcmpb],[
    386         cmpb $2,$1
     351        __(cmpb $2,$1)
    387352])             
    388353
    389354
    390355define([condition_to_boolean],[
    391         movl [$]t_value,$2_l
    392         lea (-t_offset)($2),$3
    393         cmov$1l $2_l,$3_l
     356        __(movl [$]t_value,$2_l)
     357        __(lea (-t_offset)($2),$3)
     358        __(cmov$1l $2_l,$3_l)
    394359])
    395360
    396361define([compare_reg_to_nil],[
    397         cmpb $fulltag_nil,$1_b
     362        __(cmpb $fulltag_nil,$1_b)
    398363])             
    399364       
    400365define([extract_lisptag],[
    401         movzbl $1_b,$2_l
    402         andb [$]tagmask,$2_b
     366        __(movzbl $1_b,$2_l)
     367        __(andb [$]tagmask,$2_b)
    403368])
    404369
    405370                                                               
    406371define([extract_fulltag],[
    407         movzbl $1_b,$2_l
    408         andb [$]fulltagmask,$2_b
     372        __(movzbl $1_b,$2_l)
     373        __(andb [$]fulltagmask,$2_b)
    409374])
    410375
    411376define([extract_subtag],[
    412         movb misc_subtag_offset($1),$2
     377        __(movb misc_subtag_offset($1),$2)
    413378])
    414379
    415380define([extract_typecode],[
    416381        new_macro_labels()
    417         movzbl $1_b,$2_l
    418         andb $tagmask,$2_b
    419         cmpb $tag_misc,$2_b
    420         jne macro_label(done)
    421         movb misc_subtag_offset($1),$2_b
     382        __(movzbl $1_b,$2_l)
     383        __(andb $tagmask,$2_b)
     384        __(cmpb $tag_misc,$2_b)
     385        __(jne macro_label(done))
     386        __(movb misc_subtag_offset($1),$2_b)
    422387macro_label(done):     
    423388])
     
    426391
    427392        define([dnode_align],[
    428         lea ($2+(dnode_size-1))($1),$3
    429         andb $~(dnode_size-1),$3_b
     393        __(lea ($2+(dnode_size-1))($1),$3)
     394        __(andb $~(dnode_size-1),$3_b)
    430395])
    431396       
    432397define([push_argregs],[
    433398        new_macro_labels()
    434         testw %nargs,%nargs
    435         jz macro_label(done)
    436         cmpw [$]2*node_size,%nargs
    437         je macro_label(yz)
    438         jb macro_label(z)
    439         push %arg_x
     399        __(testl %nargs,%nargs)
     400        __(jz macro_label(done))
     401        __(cmpl [$]2*node_size,%nargs)
     402        __(je macro_label(yz))
     403        __(jb macro_label(z))
     404        __(push %arg_x)
    440405macro_label(yz):
    441         push %arg_y
     406        __(push %arg_y)
    442407macro_label(z):
    443         push %arg_z
     408        __(push %arg_z)
    444409macro_label(done):
    445410])     
     
    450415
    451416define([discard_temp_frame],[
    452         movq %rcontext:tcr.save_tsp,$1
    453         movq ($1),$1
    454         movq $1,%rcontext:tcr.save_tsp
    455         movq $1,%rcontext:tcr.next_tsp
     417        __(movq rcontext(tcr.save_tsp),$1)
     418        __(movq ($1),$1)
     419        __(movq $1,rcontext(tcr.save_tsp))
     420        __(movq $1,rcontext(tcr.next_tsp))
    456421
    457422])     
    458423
    459424define([check_pending_enabled_interrupt],[
    460         btrq [$]63,%rcontext:tcr.interrupt_pending
    461         jnc,pt $1
     425        __(btrq [$]63,rcontext(tcr.interrupt_pending))
     426        __(jnc,pt $1)
    462427        interrupt_now()
    463428])
     
    470435define([check_pending_interrupt],[
    471436        new_macro_labels()
    472         movq %rcontext:tcr.tlb_pointer,$1
    473         cmpq [$]0,INTERRUPT_LEVEL_BINDING_INDEX($1)
    474         js,pt macro_label(done)
     437        __(movq rcontext(tcr.tlb_pointer),$1)
     438        __(cmpq [$]0,INTERRUPT_LEVEL_BINDING_INDEX($1))
     439        __(js,pt macro_label(done))
    475440        check_pending_enabled_interrupt(macro_label(done))
    476441macro_label(done):
     
    486451        ifelse($1,[],[
    487452        ],[
    488         movq $1,%rdi
     453        __(movq $1,%rdi)
    489454        ])
    490         movl [$]0x3000003,%eax
    491         syscall
     455        __(movl [$]0x3000003,%eax)
     456        __(syscall)
    492457])
    493458
     
    496461       
    497462define([set_foreign_gs_base],[
    498         set_gs_base([%rcontext:tcr.osid])
     463        set_gs_base([rcontext(tcr.osid)])
    499464])
    500465
     
    503468
    504469define([save_tcr_linear],[
    505         movq %rcontext:tcr.linear,$1
     470        __(movq rcontext(tcr.linear),$1)
    506471])
    507472       
     
    512477/*  branch or (b) immediately follows a conditional branch not taken. */
    513478define([repret],[
    514         .byte 0xf3
    515          ret
     479        __(.byte 0xf3)
     480        __(ret)
    516481])
    517482                               
Note: See TracChangeset for help on using the changeset viewer.