Changeset 7960


Ignore:
Timestamp:
Dec 26, 2007, 8:07:05 AM (12 years ago)
Author:
gb
Message:

Try to avoid branching around UUOs, since some implemenations don't
do a very good job of predicting forward branches to be taken.

File:
1 edited

Legend:

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

    r7895 r7960  
    171171        __(andb %arg_y_b,%imm0_b)
    172172        __(cmpb $tag_misc,%imm0_b)
    173         __(je,pt 0f)
    174         __(uuo_error_reg_not_tag(Rarg_y,tag_misc))
    175 0:      __(testb $fixnummask,%arg_z_b)
    176         __(je,pt 1f)
    177         __(uuo_error_reg_not_fixnum(Rarg_z))
    178 1:      __(movq misc_header_offset(%arg_y),%imm0)
     173        __(jne 0f)
     174        __(testb $fixnummask,%arg_z_b)
     175        __(jne 1f)
     176        __(movq misc_header_offset(%arg_y),%imm0)
    179177        __(xorb %imm0_b,%imm0_b)
    180178        __(shrq $num_subtag_bits-fixnumshift,%imm0)
    181179        __(cmpq %imm0,%arg_z)
    182         __(jb,pt 2f)
    183         __(uuo_error_vector_bounds(Rarg_z,Rarg_y))
    184 2:      __(movb misc_subtag_offset(%arg_y),%imm1_b)
     180        __(jae 2f)
     181        __(movb misc_subtag_offset(%arg_y),%imm1_b)
     182        __(jmp C(misc_ref_common))
     183       
     1840:      __(uuo_error_reg_not_tag(Rarg_y,tag_misc))
     1851:      __(uuo_error_reg_not_fixnum(Rarg_z))
     1862:      __(uuo_error_vector_bounds(Rarg_z,Rarg_y))       
    185187_endsubp(misc_ref)
    186188       
     
    577579        __(andb %arg_y_b,%imm0_b)
    578580        __(cmpb $tag_misc,%imm0_b)
    579         __(je,pt 0f)
    580         __(uuo_error_reg_not_tag(Rarg_y,tag_misc))
    581 0:      __(testb $fixnummask,%arg_z_b)
    582         __(je,pt 1f)
    583         __(uuo_error_reg_not_fixnum(Rarg_z))
    584 1:      __(movq misc_header_offset(%arg_y),%imm0)
     581        __(jne 0f)
     582        __(testb $fixnummask,%arg_z_b)
     583        __(jne 1f)
     584        __(movq misc_header_offset(%arg_y),%imm0)
    585585        __(xorb %imm0_b,%imm0_b)
    586586        __(shrq $num_subtag_bits-fixnumshift,%imm0)
    587587        __(cmpq %imm0,%arg_z)
    588         __(jb 2f)
    589         __(uuo_error_vector_bounds(Rarg_z,Rarg_y))
    590 2:      __(unbox_fixnum(%arg_x,%imm1))
     588        __(jae 2f)
     589        __(unbox_fixnum(%arg_x,%imm1))
    591590        __(jmp C(misc_ref_common))
     5910:      __(uuo_error_reg_not_tag(Rarg_y,tag_misc))
     5921:      __(uuo_error_reg_not_fixnum(Rarg_z))
     5932:      __(uuo_error_vector_bounds(Rarg_z,Rarg_y))
     594                       
    592595_endsubp(subtag_misc_ref)
    593596
     
    596599        __(andb %arg_x_b,%imm0_b)
    597600        __(cmpb $tag_misc,%imm0_b)
    598         __(je,pt 0f)
    599         __(uuo_error_reg_not_tag(Rarg_x,tag_misc))
    600 0:      __(testb $fixnummask,%arg_y_b)
    601         __(je,pt 1f)
    602         __(uuo_error_reg_not_fixnum(Rarg_y))
    603 1:      __(movq misc_header_offset(%arg_x),%imm0)
     601        __(jne 0f)
     602        __(testb $fixnummask,%arg_y_b)
     603        __(jne 1f)
     604        __(movq misc_header_offset(%arg_x),%imm0)
    604605        __(xorb %imm0_b,%imm0_b)
    605606        __(shrq $num_subtag_bits-fixnumshift,%imm0)
    606607        __(cmpq %imm0,%arg_y)
    607         __(jb 2f)
    608         __(uuo_error_vector_bounds(Rarg_y,Rarg_x))
    609 2:      __(unbox_fixnum(%temp0,%imm1))
     608        __(jae 2f)
     609        __(unbox_fixnum(%temp0,%imm1))
    610610        __(jmp C(misc_set_common))
     6110:      __(uuo_error_reg_not_tag(Rarg_x,tag_misc))
     6121:      __(uuo_error_reg_not_fixnum(Rarg_y))
     6132:      __(uuo_error_vector_bounds(Rarg_y,Rarg_x))                       
    611614_endsubp(subtag_misc_set)
    612615
     
    615618        __(andb %arg_x_b,%imm0_b)
    616619        __(cmpb $tag_misc,%imm0_b)
    617         __(je,pt 0f)
    618         __(uuo_error_reg_not_tag(Rarg_x,tag_misc))
    619 0:      __(testb $fixnummask,%arg_y_b)
    620         __(je,pt 1f)
    621         __(uuo_error_reg_not_fixnum(Rarg_y))
    622 1:      __(movq misc_header_offset(%arg_x),%imm0)
     620        __(jne 0f)
     621        __(testb $fixnummask,%arg_y_b)
     622        __(jne 1f)
     623        __(movq misc_header_offset(%arg_x),%imm0)
    623624        __(xorb %imm0_b,%imm0_b)
    624625        __(shrq $num_subtag_bits-fixnumshift,%imm0)
    625626        __(cmpq %imm0,%arg_y)
    626         __(jb 2f)
    627         __(uuo_error_vector_bounds(Rarg_y,Rarg_x))
    628 2:      __(movb misc_subtag_offset(%arg_x),%imm1_b)
    629         /* __(jmp C(misc_set_common))   */
     627        __(jae 2f)
     628        __(movb misc_subtag_offset(%arg_x),%imm1_b)
     629        __(jmp C(misc_set_common))
     630       
     6310:      __(uuo_error_reg_not_tag(Rarg_x,tag_misc))
     6321:      __(uuo_error_reg_not_fixnum(Rarg_y))
     6332:      __(uuo_error_vector_bounds(Rarg_y,Rarg_x))                       
    630634_endsubp(misc_set)
    631635               
     
    33653369        __(movq (%imm1,%imm0),%arg_z)
    33663370        __(cmpb $no_thread_local_binding_marker,%arg_z_b)
    3367         __(jne 8f)
    3368 7:      __(movq symbol.vcell(%arg_y),%arg_z)
    3369 8:      __(cmpb $unbound_marker,%arg_z_b)
    3370         __(jne,pt 9f)
    3371         __(uuo_error_reg_unbound(Rarg_y))
    3372 9:      __(repret)             
     3371        __(cmoveq symbol.vcell(%arg_y),%arg_z)
     3372        __(cmpb $unbound_marker,%arg_z_b)
     3373        __(je 9f)
     33748:      __(repret)
     33757:      __(cmpb $unbound_marker,symbol.vcell(%arg_y))
     3376        __(movq symbol.vcell(%arg_y),%arg_z)
     3377        __(je 9f)
     3378        __(repret)
     33799:      __(uuo_error_reg_unbound(Rarg_y))
    33733380_endsubp(specrefcheck)
    33743381
     
    37393746        __(andb %arg_z_b,%imm0_b)
    37403747        __(cmpb $tag_list,%imm0_b)
    3741         __(jz,pt 2f)
    3742         __(uuo_error_reg_not_list(Rarg_z))
    3743 2:      __(_car(%arg_z,%arg_x))
     3748        __(jnz 2f)
     3749        __(_car(%arg_z,%arg_x))
    37443750        __(_cdr(%arg_z,%arg_z))
    37453751        __(cmpb $fulltag_nil,%arg_x_b)
     
    37483754        __(andb %arg_x_b,%imm0_b)
    37493755        __(cmpb $tag_list,%imm0_b)
    3750         __(jz,pt 3f)
    3751         __(uuo_error_reg_not_list(Rarg_x))
    3752 3:      __(_car(%arg_x,%temp0))
     3756        __(jnz 3f)
     3757        __(_car(%arg_x,%temp0))
    37533758        __(cmpq %temp0,%arg_y)
    37543759        __(jnz 4f)
     
    375737624:      __(cmpb $fulltag_nil,%arg_z_b)
    375837635:      __(jnz 1b)
    3759         __(repret)                     
     3764        __(repret)
     37652:      __(uuo_error_reg_not_list(Rarg_z))
     37663:      __(uuo_error_reg_not_list(Rarg_x))       
    37603767_endsubp(builtin_assq) 
    37613768
     
    37663773        __(andb %arg_z_b,%imm0_b)
    37673774        __(cmpb $tag_list,%imm0_b)
    3768         __(jz,pt 2f)
    3769         __(uuo_error_reg_not_list(Rarg_z))
    3770 2:      __(_car(%arg_z,%arg_x))
     3775        __(jnz 2f)
     3776        __(_car(%arg_z,%arg_x))
    37713777        __(_cdr(%arg_z,%temp0))
    37723778        __(cmpq %arg_x,%arg_y)
     
    377637823:      __(jnz 1b)
    377737834:      __(repret)                             
     37842:      __(uuo_error_reg_not_list(Rarg_z))
    37783785_endsubp(builtin_memq)
    37793786
     
    45834590_spentry(aref2)
    45844591        __(testb $fixnummask,%arg_y_b)
    4585         __(je,pt 0f)
    4586         __(uuo_error_reg_not_fixnum(Rarg_y))
    4587 0:      __(testb $fixnummask,%arg_z_b)
    4588         __(je,pt 1f)
    4589         __(uuo_error_reg_not_fixnum(Rarg_z))
    4590 1:      __(extract_typecode(%arg_x,%imm0))
     4592        __(jne 0f)
     4593       
     4594        __(testb $fixnummask,%arg_z_b)
     4595        __(jne 1f)
     4596        __(extract_typecode(%arg_x,%imm0))
    45914597        __(cmpb $subtag_arrayH,%imm0_b)
    45924598        __(jne 2f)
    45934599        __(cmpq $2<<fixnumshift,arrayH.rank(%arg_x))
    4594         __(je,pt 3f)
    4595 2:      __(uuo_error_reg_not_type(Rarg_x,error_object_not_array_2d))
    4596 3:      __(cmpq arrayH.dim0(%arg_x),%arg_y)
    4597         __(jb,pt 4f)
    4598         __(uuo_error_array_bounds(Rarg_y,Rarg_x))
    4599 4:      __(movq arrayH.dim0+node_size(%arg_x),%imm0)
     4600        __(jne 2f)
     4601        __(cmpq arrayH.dim0(%arg_x),%arg_y)
     4602        __(jae 3f)
     4603        __(movq arrayH.dim0+node_size(%arg_x),%imm0)
    46004604        __(cmpq %imm0,%arg_z)
    4601         __(jb,pt 5f)
    4602         __(uuo_error_array_bounds(Rarg_z,Rarg_x))
    4603 5:      __(unbox_fixnum(%imm0,%imm0))
     4605        __(jae 4f)
     4606        __(unbox_fixnum(%imm0,%imm0))
    46044607        __(mulq %arg_y)         /* imm0 <- imm0 * arg_y */
    46054608        __(addq %imm0,%arg_z)
     
    46114614        __(ja C(misc_ref_common))
    46124615        __(jmp 6b)
     46160:      __(uuo_error_reg_not_fixnum(Rarg_y))
     46171:      __(uuo_error_reg_not_fixnum(Rarg_z))
     46182:      __(uuo_error_reg_not_type(Rarg_x,error_object_not_array_2d))
     46193:      __(uuo_error_array_bounds(Rarg_y,Rarg_x))
     46204:      __(uuo_error_array_bounds(Rarg_z,Rarg_x))
     4621       
    46134622_endsubp(aref2)
    46144623
     
    46164625_spentry(aref3)
    46174626        __(testb $fixnummask,%arg_x_b)
    4618         __(je,pt 0f)
    4619         __(uuo_error_reg_not_fixnum(Rarg_x))
    4620 0:      __(testb $fixnummask,%arg_y_b)
    4621         __(je,pt 1f)
    4622         __(uuo_error_reg_not_fixnum(Rarg_y))
    4623 1:      __(testb $fixnummask,%arg_z_b)
    4624         __(je,pt 2f)
    4625         __(uuo_error_reg_not_fixnum(Rarg_z))
    4626 2:      __(extract_typecode(%temp0,%imm0))
     4627        __(jne 0f)
     4628        __(testb $fixnummask,%arg_y_b)
     4629        __(jne 1f)
     4630        __(testb $fixnummask,%arg_z_b)
     4631        __(jne 2f)
     4632        __(extract_typecode(%temp0,%imm0))
    46274633        __(cmpb $subtag_arrayH,%imm0_b)
    46284634        __(jne 3f)
    46294635        __(cmpq $3<<fixnumshift,arrayH.rank(%temp0))
    4630         __(je,pt 4f)
    4631 3:      __(uuo_error_reg_not_type(Rtemp0,error_object_not_array_3d))
    4632 4:      __(cmpq arrayH.dim0(%temp0),%arg_x)
    4633         __(jb,pt 5f)
    4634         __(uuo_error_array_bounds(Rarg_x,Rtemp0))
    4635 5:      __(movq arrayH.dim0+node_size(%temp0),%imm0)
     4636        __(jne 3f)
     4637        __(cmpq arrayH.dim0(%temp0),%arg_x)
     4638        __(jae 5f)
     4639        __(movq arrayH.dim0+node_size(%temp0),%imm0)
    46364640        __(cmpq %imm0,%arg_y)
    4637         __(jb,pt 6f)
    4638         __(uuo_error_array_bounds(Rarg_y,Rtemp0))
    4639 6:      __(unbox_fixnum(%imm0,%imm0))
     4641        __(jae 6f)
     4642        __(unbox_fixnum(%imm0,%imm0))
    46404643        __(movq arrayH.dim0+(node_size*2)(%temp0),%imm1)
    46414644        __(cmpq %imm1,%arg_z)
    4642         __(jb,pt 7f)
    4643         __(uuo_error_array_bounds(Rarg_z,Rtemp0))
    4644 7:      __(unbox_fixnum(%imm1,%imm1))
     4645        __(jae 7f)
     4646        __(unbox_fixnum(%imm1,%imm1))
    46454647        __(imulq %imm1,%arg_y)
    46464648        __(mulq %imm1)
     
    46554657        __(ja C(misc_ref_common))
    46564658        __(jmp 8b)
     46590:      __(uuo_error_reg_not_fixnum(Rarg_x))
     46601:      __(uuo_error_reg_not_fixnum(Rarg_y))   
     46612:      __(uuo_error_reg_not_fixnum(Rarg_z))
     46623:      __(uuo_error_reg_not_type(Rtemp0,error_object_not_array_3d))
     46635:      __(uuo_error_array_bounds(Rarg_x,Rtemp0))
     46646:      __(uuo_error_array_bounds(Rarg_y,Rtemp0))
     46657:      __(uuo_error_array_bounds(Rarg_z,Rtemp0))
     4666       
    46574667_endsubp(aref3)
    46584668       
     
    46604670_spentry(aset2)
    46614671        __(testb $fixnummask,%arg_x_b)
    4662         __(je,pt 0f)
    4663         __(uuo_error_reg_not_fixnum(Rarg_x))
    4664 0:      __(testb $fixnummask,%arg_y_b)
    4665         __(je,pt 1f)
    4666         __(uuo_error_reg_not_fixnum(Rarg_y))
    4667 1:      __(extract_typecode(%temp0,%imm0))
     4672        __(jne 0f)
     4673        __(testb $fixnummask,%arg_y_b)
     4674        __(jne 1f)
     4675        __(extract_typecode(%temp0,%imm0))
    46684676        __(cmpb $subtag_arrayH,%imm0_b)
    46694677        __(jne 2f)
    46704678        __(cmpq $2<<fixnumshift,arrayH.rank(%temp0))
    4671         __(je,pt 3f)
    4672 2:      __(uuo_error_reg_not_type(Rtemp0,error_object_not_array_2d))
    4673 3:      __(cmpq arrayH.dim0(%temp0),%arg_x)
    4674         __(jb,pt 4f)
    4675         __(uuo_error_array_bounds(Rarg_x,Rtemp0))
    4676 4:      __(movq arrayH.dim0+node_size(%temp0),%imm0)
     4679        __(jne 2f)
     4680        __(cmpq arrayH.dim0(%temp0),%arg_x)
     4681        __(jae 4f)
     4682        __(movq arrayH.dim0+node_size(%temp0),%imm0)
    46774683        __(cmpq %imm0,%arg_y)
    4678         __(jb,pt 5f)
    4679         __(uuo_error_array_bounds(Rarg_y,Rtemp0))
    4680 5:      __(unbox_fixnum(%imm0,%imm0))
     4684        __(jae 5f)
     4685        __(unbox_fixnum(%imm0,%imm0))
    46814686        __(mulq %arg_x)         /* imm0 <- imm0 * arg_x */
    46824687        __(addq %imm0,%arg_y)
     
    46884693        __(ja C(misc_set_common))
    46894694        __(jmp 6b)
     46950:      __(uuo_error_reg_not_fixnum(Rarg_x))
     46961:      __(uuo_error_reg_not_fixnum(Rarg_y))
     46972:      __(uuo_error_reg_not_type(Rtemp0,error_object_not_array_2d))
     46984:      __(uuo_error_array_bounds(Rarg_x,Rtemp0))
     46995:      __(uuo_error_array_bounds(Rarg_y,Rtemp0))
    46904700_endsubp(aset2)
    46914701
     
    46944704_spentry(aset3)
    46954705        __(testb $fixnummask,%temp0_b)
    4696         __(je,pt 0f)
    4697         __(uuo_error_reg_not_fixnum(Rtemp0))
    4698 0:      __(testb $fixnummask,%arg_x_b)
    4699         __(je,pt 1f)
    4700         __(uuo_error_reg_not_fixnum(Rarg_x))
    4701 1:      __(testb $fixnummask,%arg_y_b)
    4702         __(je,pt 2f)
    4703         __(uuo_error_reg_not_fixnum(Rarg_y))
    4704 2:      __(extract_typecode(%temp1,%imm0))
     4706        __(jne 0f)
     4707        __(testb $fixnummask,%arg_x_b)
     4708        __(jne 1f)
     4709        __(testb $fixnummask,%arg_y_b)
     4710        __(jne 2f)
     4711        __(extract_typecode(%temp1,%imm0))
    47054712        __(cmpb $subtag_arrayH,%imm0_b)
    47064713        __(jne 3f)
    47074714        __(cmpq $3<<fixnumshift,arrayH.rank(%temp1))
    4708         __(je,pt 4f)
    4709 3:      __(uuo_error_reg_not_type(Rtemp1,error_object_not_array_3d))
    4710 4:      __(cmpq arrayH.dim0(%temp1),%temp0)
    4711         __(jb,pt 5f)
    4712         __(uuo_error_array_bounds(Rtemp0,Rtemp1))
    4713 5:      __(movq arrayH.dim0+node_size(%temp1),%imm0)
     4715        __(jne 3f)
     4716        __(cmpq arrayH.dim0(%temp1),%temp0)
     4717        __(jae 5f)
     4718        __(movq arrayH.dim0+node_size(%temp1),%imm0)
    47144719        __(cmpq %imm0,%arg_x)
    4715         __(jb,pt 6f)
    4716         __(uuo_error_array_bounds(Rarg_x,Rtemp1))
    4717 6:      __(unbox_fixnum(%imm0,%imm0))
     4720        __(jae 6f)
     4721        __(unbox_fixnum(%imm0,%imm0))
    47184722        __(movq arrayH.dim0+(node_size*2)(%temp1),%imm1)
    47194723        __(cmpq %imm1,%arg_y)
    4720         __(jb,pt 7f)
    4721         __(uuo_error_array_bounds(Rarg_y,Rtemp1))
    4722 7:      __(unbox_fixnum(%imm1,%imm1))
     4724        __(jae 7f)
     4725        __(unbox_fixnum(%imm1,%imm1))
    47234726        __(imulq %imm1,%arg_x)
    47244727        __(mulq %imm1)
     
    47334736        __(ja C(misc_set_common))
    47344737        __(jmp 8b)
     4738       
     47390:      __(uuo_error_reg_not_fixnum(Rtemp0))
     47401:      __(uuo_error_reg_not_fixnum(Rarg_x))
     47412:      __(uuo_error_reg_not_fixnum(Rarg_y))
     47423:      __(uuo_error_reg_not_type(Rtemp1,error_object_not_array_3d))
     47435:      __(uuo_error_array_bounds(Rtemp0,Rtemp1))
     47446:      __(uuo_error_array_bounds(Rarg_x,Rtemp1))
     47456:      __(uuo_error_array_bounds(Rarg_x,Rtemp1))
     47467:      __(uuo_error_array_bounds(Rarg_y,Rtemp1))
     4747       
    47354748_endsubp(aset3)
    47364749
Note: See TracChangeset for help on using the changeset viewer.