Changeset 11227


Ignore:
Timestamp:
Oct 26, 2008, 8:43:08 PM (11 years ago)
Author:
rme
Message:

Try to avoid branching around UUOs (cf. r7960).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/lisp-kernel/x86-spentry32.s

    r11223 r11227  
    4444        __(andb $tagmask,%imm0_b)
    4545        __(cmpb $tag_misc,%imm0_b)
    46         __(je 0f)
    47         __(uuo_error_reg_not_tag(Rarg_y,tag_misc))
    48 0:      __(testb $fixnummask,%arg_z_b)
    49         __(je 1f)
    50         __(uuo_error_reg_not_fixnum(Rarg_z))
    51 1:      __(movl misc_header_offset(%arg_y),%imm0)
     46        __(jne 0f)
     47        __(testb $fixnummask,%arg_z_b)
     48        __(jne 1f)
     49        __(movl misc_header_offset(%arg_y),%imm0)
    5250        __(xorb %imm0_b,%imm0_b)
    5351        __(shrl $num_subtag_bits-fixnumshift,%imm0)
    5452        __(cmpl %imm0,%arg_z)
    55         __(jb 2f)
    56         __(uuo_error_vector_bounds(Rarg_z,Rarg_y))
    57 2:      __(xorl %imm0,%imm0)
     53        __(jae 2f)
    5854        __(movb misc_subtag_offset(%arg_y),%imm0_b)
    59         /* fall through */
     55        __(jmp C(misc_ref_common))
     56
     570:      __(uuo_error_reg_not_tag(Rarg_y,tag_misc))
     581:      __(uuo_error_reg_not_fixnum(Rarg_z))
     592:      __(uuo_error_vector_bounds(Rarg_z,Rarg_y))
    6060_endsubp(misc_ref)
    6161
     
    426426        __(and $tagmask,%imm0)
    427427        __(cmp $tag_misc,%imm0)
    428         __(je 0f)
    429         __(uuo_error_reg_not_tag(Rarg_y,tag_misc))
    430 0:      __(testb $fixnummask,%arg_z_b)
    431         __(je 1f)
    432         __(uuo_error_reg_not_fixnum(Rarg_z))
    433 1:      __(movl misc_header_offset(%arg_y),%imm0)
     428        __(jne 0f)
     429        __(testb $fixnummask,%arg_z_b)
     430        __(jne 1f)
     431        __(movl misc_header_offset(%arg_y),%imm0)
    434432        __(xorb %imm0_b,%imm0_b)
    435433        __(shrl $num_subtag_bits-fixnumshift,%imm0)
    436434        __(cmp %imm0,%arg_z)
    437         __(jb 2f)
    438         __(uuo_error_vector_bounds(Rarg_z,Rarg_y))
    439 2:      __(unbox_fixnum(%temp0,%imm0))
     435        __(jae 2f)
     436        __(unbox_fixnum(%temp0,%imm0))
    440437        __(jmp C(misc_ref_common))
     4380:      __(uuo_error_reg_not_tag(Rarg_y,tag_misc))
     4391:      __(uuo_error_reg_not_fixnum(Rarg_z))
     4402:      __(uuo_error_vector_bounds(Rarg_z,Rarg_y))
    441441_endsubp(subtag_misc_ref)
    442442
     
    446446        __(andb $tagmask,%imm0_b)
    447447        __(cmpb $tag_misc,%imm0_b)
    448         __(je 0f)
    449         __(uuo_error_reg_not_tag(Rtemp0,tag_misc))
    450 0:      __(mov %arg_y,%imm0)
     448        __(jne 0f)
     449        __(mov %arg_y,%imm0)
    451450        __(testb $fixnummask,%imm0_b)
    452         __(je 1f)
    453         __(uuo_error_reg_not_fixnum(Rarg_y))
    454 1:      __(movl misc_header_offset(%temp0),%imm0)
     451        __(jne 1f)
     452        __(movl misc_header_offset(%temp0),%imm0)
    455453        __(xorb %imm0_b,%imm0_b)
    456454        __(shrl $num_subtag_bits-fixnumshift,%imm0)
    457455        __(cmpl %imm0,%arg_y)
    458         __(jb 2f)
    459         __(uuo_error_vector_bounds(Rarg_y,Rtemp0))
    460 2:      __(unbox_fixnum(%temp1,%imm0))
     456        __(jae 2f)
     457        __(unbox_fixnum(%temp1,%imm0))
    461458        __(jmp C(misc_set_common))
     4590:      __(uuo_error_reg_not_tag(Rtemp0,tag_misc))
     4601:      __(uuo_error_reg_not_fixnum(Rarg_y))
     4612:      __(uuo_error_vector_bounds(Rarg_y,Rtemp0))
    462462_endsubp(subtag_misc_set)
    463463
     
    467467        __(andb $tagmask,%imm0_b)
    468468        __(cmpb $tag_misc,%imm0_b)
    469         __(je 0f)
    470         __(uuo_error_reg_not_tag(Rtemp0,tag_misc))
    471 0:      __(mov %arg_y,%imm0)    /* no byte reg for %arg_y/%esi */
    472         __(testb $fixnummask,%imm0_b)
    473         __(je 1f)
    474         __(uuo_error_reg_not_fixnum(Rarg_y))
    475 1:      __(movl misc_header_offset(%temp0),%imm0)
     469        __(jne 0f)
     470        __(test $fixnummask,%arg_y)
     471        __(jne 1f)
     472        __(movl misc_header_offset(%temp0),%imm0)
    476473        __(xorb %imm0_b,%imm0_b)
    477474        __(shrl $num_subtag_bits-fixnumshift,%imm0)
    478475        __(cmpl %imm0,%arg_y)
    479         __(jb 2f)
    480         __(uuo_error_vector_bounds(Rarg_y,Rtemp0))
    481 2:      __(xorl %imm0,%imm0)
     476        __(jae 2f)
     477        __(xorl %imm0,%imm0)
    482478        __(movb misc_subtag_offset(%temp0),%imm0_b)
    483         /* fall through */
     479        __(jmp C(misc_set_common))
     4800:      __(uuo_error_reg_not_tag(Rtemp0,tag_misc))
     4811:      __(uuo_error_reg_not_fixnum(Rarg_y))
     4822:      __(uuo_error_vector_bounds(Rarg_y,Rtemp0))
    484483_endsubp(misc_set)
    485484
     
    34433442        __(movl (%temp1,%imm0),%arg_z)
    34443443        __(cmpb $no_thread_local_binding_marker,%arg_z_b)
    3445         __(jne 8f)
     3444        __(cmovel symbol.vcell(%arg_y),%arg_z)
     3445        __(cmpb $unbound_marker,%arg_z_b)
     3446        __(je 9f)
     34478:      __(repret)
    344634487:      __(movl symbol.vcell(%arg_y),%arg_z)
    3447 8:      __(cmpb $unbound_marker,%arg_z_b)
    3448         __(jne 9f)
    3449         __(uuo_error_reg_unbound(Rarg_y))
    3450 9:      __(repret)
     3449        __(cmpb $unbound_marker,symbol.vcell(%arg_y))
     3450        __(je 9f)
     3451        __(repret)
     34529:      __(uuo_error_reg_unbound(Rarg_y))
    34513453_endsubp(specrefcheck)
    34523454
     
    38913893        __(andb $fulltagmask,%imm0_b)
    38923894        __(cmpb $fulltag_cons,%imm0_b)
    3893         __(je 2f)
    3894         __(uuo_error_reg_not_list(Rarg_z))
    3895 2:      __(_car(%arg_z,%temp0))
     3895        __(jne 2f)
     3896        __(_car(%arg_z,%temp0))
    38963897        __(_cdr(%arg_z,%arg_z))
    38973898        __(cmpl $nil_value,%temp0)
     
    39003901        __(andb $fulltagmask,%imm0_b)
    39013902        __(cmpb $fulltag_cons,%imm0_b)
    3902         __(je 3f)
    3903         __(uuo_error_reg_not_list(Rtemp0))
    3904 3:      __(_car(%temp0,%temp1))
     3903        __(jne 3f)
     3904        __(_car(%temp0,%temp1))
    39053905        __(cmpl %temp1,%arg_y)
    39063906        __(jne 4f)
     
    391039105:      __(jnz 1b)
    39113911        __(repret)
     39122:      __(uuo_error_reg_not_list(Rarg_z))
     39133:      __(uuo_error_reg_not_list(Rtemp0))
    39123914_endsubp(builtin_assq)
    39133915
     
    39183920        __(andb %arg_z_b,%imm0_b)
    39193921        __(cmpb $fulltag_cons,%imm0_b)
    3920         __(jz 2f)
    3921         __(uuo_error_reg_not_list(Rarg_z))
    3922 2:      __(_car(%arg_z,%temp1))
     3922        __(jne 2f)
     3923        __(_car(%arg_z,%temp1))
    39233924        __(_cdr(%arg_z,%temp0))
    39243925        __(cmpl %temp1,%arg_y)
     
    392839293:      __(jnz 1b)
    392939304:      __(repret)
     39312:      __(uuo_error_reg_not_list(Rarg_z))
    39303932_endsubp(builtin_memq)
    39313933
     
    43424344_spentry(aref2)
    43434345        __(testl $fixnummask,%arg_y)
    4344         __(je 0f)
    4345         __(uuo_error_reg_not_fixnum(Rarg_y))
    4346 0:      __(testb $fixnummask,%arg_z_b)
    4347         __(je 1f)
    4348         __(uuo_error_reg_not_fixnum(Rarg_z))
    4349 1:      __(extract_typecode(%temp0,%imm0))
     4346        __(jne 0f)
     4347        __(testb $fixnummask,%arg_z_b)
     4348        __(jne 1f)
     4349        __(extract_typecode(%temp0,%imm0))
    43504350        __(cmpb $subtag_arrayH,%imm0_b)
    43514351        __(jne 2f)
    43524352        __(cmpl $2<<fixnumshift,arrayH.rank(%temp0))
    4353         __(je 3f)
    4354 2:      __(uuo_error_reg_not_type(Rtemp0,error_object_not_array_2d))
    4355 3:      __(cmpl arrayH.dim0(%temp0),%arg_y)
    4356         __(jb 4f)
    4357         __(uuo_error_array_bounds(Rarg_y,Rtemp0))
    4358 4:      __(movl arrayH.dim0+node_size(%temp0),%imm0)
     4353        __(jne 2f)
     4354        __(cmpl arrayH.dim0(%temp0),%arg_y)
     4355        __(jae 3f)
     4356        __(movl arrayH.dim0+node_size(%temp0),%imm0)
    43594357        __(cmpl %imm0,%arg_z)
    4360         __(jb 5f)
    4361         __(uuo_error_array_bounds(Rarg_z,Rtemp0))
    4362 5:      __(sarl $fixnumshift,%imm0)
     4358        __(jae 4f)
     4359        __(sarl $fixnumshift,%imm0)
    43634360        __(imull %arg_y,%imm0)
    43644361        __(addl %imm0,%arg_z)
     
    43714368        __(ja C(misc_ref_common))
    43724369        __(jmp 6b)
     43700:      __(uuo_error_reg_not_fixnum(Rarg_y))
     43711:      __(uuo_error_reg_not_fixnum(Rarg_z))
     43722:      __(uuo_error_reg_not_type(Rtemp0,error_object_not_array_2d))
     43733:      __(uuo_error_array_bounds(Rarg_y,Rtemp0))
     43744:      __(uuo_error_array_bounds(Rarg_z,Rtemp0))
     4375
    43734376_endsubp(aref2)
    43744377
     
    44214424_spentry(aset2)
    44224425        __(testb $fixnummask,%temp0_b)
    4423         __(je 0f)
    4424         __(uuo_error_reg_not_fixnum(Rtemp0))
    4425 0:      __(testl $fixnummask,%arg_y)
    4426         __(je 1f)
    4427         __(uuo_error_reg_not_fixnum(Rarg_y))
    4428 1:      __(extract_typecode(%temp1,%imm0))
     4426        __(jne 0f)
     4427        __(testl $fixnummask,%arg_y)
     4428        __(jne 1f)
     4429        __(extract_typecode(%temp1,%imm0))
    44294430        __(cmpb $subtag_arrayH,%imm0_b)
    44304431        __(jne 2f)
    44314432        __(cmpl $2<<fixnumshift,arrayH.rank(%temp1))
    4432         __(je 3f)
    4433 2:      __(uuo_error_reg_not_type(Rtemp1,error_object_not_array_2d))
    4434 3:      __(cmpl arrayH.dim0(%temp1),%temp0)
    4435         __(jb 4f)
    4436         __(uuo_error_array_bounds(Rtemp0,Rtemp1))
    4437 4:      __(movl arrayH.dim0+node_size(%temp1),%imm0)
     4433        __(jne 2f)
     4434        __(cmpl arrayH.dim0(%temp1),%temp0)
     4435        __(jae 3f)
     4436        __(movl arrayH.dim0+node_size(%temp1),%imm0)
    44384437        __(cmpl %imm0,%arg_y)
    4439         __(jb 5f)
    4440         __(uuo_error_array_bounds(Rarg_y,Rtemp1))
    4441 5:      __(sarl $fixnumshift,%imm0)
     4438        __(jae 4f)
     4439        __(sarl $fixnumshift,%imm0)
    44424440        __(imull %temp0,%imm0)
    44434441        __(addl %imm0,%arg_y)
     
    44504448        __(ja C(misc_set_common))
    44514449        __(jmp 6b)
     44500:      __(uuo_error_reg_not_fixnum(Rtemp0))
     44511:      __(uuo_error_reg_not_fixnum(Rarg_y))
     44522:      __(uuo_error_reg_not_type(Rtemp1,error_object_not_array_2d))
     44533:      __(uuo_error_array_bounds(Rtemp0,Rtemp1))
     44544:      __(uuo_error_array_bounds(Rarg_y,Rtemp1))
    44524455_endsubp(aset2)
    44534456
Note: See TracChangeset for help on using the changeset viewer.