Changeset 9616


Ignore:
Timestamp:
May 28, 2008, 9:48:44 PM (11 years ago)
Author:
rme
Message:

Use memory operand with BTS instruction when setting refbits in egc_rplaca,
egc_rplacd, egc_gvset, set_hash_key, and store_node_conditional.

Implement SPmakeu64.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/ia32/lisp-kernel/x86-spentry32.s

    r9588 r9616  
    16801680        __(cmpl lisp_global(oldspace_dnode_count),%imm0)
    16811681        __(jae 0b)
    1682         __(andl $~(1<<bitmap_shift-1),%temp0)
    1683         __(shrl $bitmap_shift-fixnumshift,%temp0)
    1684         __(andl $31,%imm0)
    1685         __(addl lisp_global(refbits),%temp0)
     1682        __(ref_global(refbits,%temp0))
    16861683        __(xorb $31,%imm0_b)
    16871684        __(lock)
     
    17021699        __(cmpl lisp_global(oldspace_dnode_count),%imm0)
    17031700        __(jae 0b)
    1704         __(andl $~(1<<bitmap_shift-1),%temp0)
    1705         __(shrl $bitmap_shift-fixnumshift,%temp0)
    1706         __(andl $31,%imm0)
    1707         __(addl lisp_global(refbits),%temp0)
     1701        __(ref_global(refbits,%temp0))
    17081702        __(xorb $31,%imm0_b)
    17091703        __(lock)
     
    17261720        __(cmpl lisp_global(oldspace_dnode_count),%imm0)
    17271721        __(jae 0b)
    1728         __(andl $~(1<<bitmap_shift-1),%temp0)
    1729         __(shrl $bitmap_shift-fixnumshift,%temp0)
    1730         __(andl $31,%imm0)
    1731         __(addl lisp_global(refbits),%temp0)
     1722        __(ref_global(refbits,%temp0))
    17321723        __(xorb $31,%imm0_b)
    17331724        __(lock)
     
    17521743        __(cmpl lisp_global(oldspace_dnode_count),%imm0)
    17531744        __(jae 0b)
    1754         __(push %temp0)
    1755         __(andl $~(1<<bitmap_shift-1),%temp0)
    1756         __(shrl $bitmap_shift-fixnumshift,%temp0)
    1757         __(andl $31,%imm0)
    1758         __(addl lisp_global(refbits),%temp0)
     1745        __(ref_global(refbits,%temp1))
    17591746        __(xorb $31,%imm0_b)
    17601747        __(lock)
    1761         __(btsl %imm0,(%temp0))
     1748        __(btsl %imm0,(%temp1))
    17621749        /* Now memoize the address of the hash vector */
    1763         __(pop %imm0)
     1750        __(movl %temp0,%imm0)
    17641751        __(subl lisp_global(heap_start),%imm0)
    17651752        __(shrl $dnode_shift,%imm0)
    1766         __(andl $~(1<<bitmap_shift-1),%temp0)
    1767         __(shrl $bitmap_shift-fixnumshift,%temp0)
    1768         __(andl $31,%imm0)
    1769         __(addl lisp_global(refbits),%temp0)
    17701753        __(xorb $31,%imm0_b)
    17711754        __(lock)
    1772         __(btsl %imm0,(%temp0))
     1755        __(btsl %imm0,(%temp1))
    17731756        __(ret)
    17741757_endsubp(set_hash_key)
     
    17991782        __(cmpl lisp_global(oldspace_dnode_count),%imm0)
    18001783        __(jae 2f)
    1801         __(andl $~(1<<bitmap_shift-1),%temp0)
    1802         __(shrl $bitmap_shift-fixnumshift,%temp0)
    1803         __(andl $31,%imm0)
    1804         __(addl lisp_global(refbits),%temp0)
     1784        __(ref_global(refbits,%temp1))
    18051785        __(xorb $31,%imm0_b)
    18061786        __(lock)
    1807         __(btsl %imm0,(%temp0))
     1787        __(btsl %imm0,(%temp1))
    18081788        .globl C(egc_write_barrier_end)
    18091789C(egc_write_barrier_end):
     
    30773057_endsubp(getu64)
    30783058
     3059/* Make unsigned integer from value in mm0 */
    30793060_spentry(makeu64)
    3080         __(int $3)
     3061        __(movq %mm0,%mm1)
     3062        __(psrlq $32,%mm0)
     3063        __(movd %mm0,%imm0)
     3064        __(test %imm0,%imm0)
     3065        __(js 3f)
     3066        __(jnz 2f)
     3067        __(movd %mm1,%imm0)
     3068        __(cmpl $target_most_positive_fixnum,%imm0)
     3069        __(ja 1f)
     3070        __(box_fixnum(%imm0,%arg_z))
     3071        __(ret)
     30721:      /* maybe make a 1 digit bignum */
     3073        __(test %imm0,%imm0)
     3074        __(js 2f)
     3075        __(movl $one_digit_bignum_header,%imm0)
     3076        __(movd %imm0,%mm0)
     3077        __(Misc_Alloc_Fixed(%arg_z,aligned_bignum_size(1)))
     3078        __(movd %mm1,misc_data_offset(%arg_z))
     3079        __(ret)
     3080        /* make a 2 digit bignum */
     30812:      __(movl $two_digit_bignum_header,%imm0)
     3082        __(movd %imm0,%mm0)
     3083        __(Misc_Alloc_Fixed(%arg_z,aligned_bignum_size(2)))
     3084        __(movq %mm1,misc_data_offset(%arg_z))
     3085        __(ret)
     3086        /* make a 3 digit bignum */
     30873:      __(movl $three_digit_bignum_header,%imm0)
     3088        __(movd %imm0,%mm0)
     3089        __(Misc_Alloc_Fixed(%arg_z,aligned_bignum_size(3)))
     3090        __(movq %mm1,misc_data_offset(%arg_z))
     3091        __(ret)
    30813092_endsubp(makeu64)
    30823093
     
    31343145/* Make a lisp integer from the unsigned value in imm0 */
    31353146_spentry(makeu32)
    3136         __(cmpl $(1<<29),%imm0)
    3137         __(jae 0f)      /* need to make a bignum */
     3147        __(cmpl $target_most_positive_fixnum,%imm0)
     3148        __(ja 0f)       /* need to make a bignum */
    31383149        __(box_fixnum(%imm0,%arg_z))
    31393150        __(ret)
Note: See TracChangeset for help on using the changeset viewer.