[Openmcl-cvs-notifications] r15295 - in /trunk/source/lisp-kernel: x86-spentry32.s x86-spentry64.s

gb at clozure.com gb at clozure.com
Thu Apr 5 20:42:44 CDT 2012


Author: gb
Date: Thu Apr  5 20:42:44 2012
New Revision: 15295

Log:
Don't call out in .SPbuiltin_eql. =


(#'EQL doesn't call .SPbuiltin_eql yet, since that's hard to bootstrap
on Windows.)

Modified:
    trunk/source/lisp-kernel/x86-spentry32.s
    trunk/source/lisp-kernel/x86-spentry64.s

Modified: trunk/source/lisp-kernel/x86-spentry32.s
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/lisp-kernel/x86-spentry32.s (original)
+++ trunk/source/lisp-kernel/x86-spentry32.s Thu Apr  5 20:42:44 2012
@@ -3865,26 +3865,75 @@
 _endsubp(builtin_le)
 =

 _spentry(builtin_eql)
-	__(cmpl %arg_y,%arg_z)
-	__(je 1f)
+0:      __(cmpl %arg_y,%arg_z)
+	__(je 8f)
 	/* Not EQ.  Could only possibly be EQL if both are tag-misc  */
 	/* and both have the same subtag. */
 	__(movl %arg_y,%imm0)
 	__(andb $tagmask,%imm0_b)
 	__(cmpb $tag_misc,%imm0_b)
-	__(jne 2f)
+	__(jne 9f)
 	__(movb %arg_z_b,%imm0_bh)
 	__(andb $tagmask,%imm0_bh)
 	__(cmpb %imm0_bh,%imm0_b)
-	__(jne 2f)
+	__(jne 9f)
 	__(extract_subtag(%arg_y,%imm0_b))
 	__(extract_subtag(%arg_z,%imm0_bh))
 	__(cmpb %imm0_b,%imm0_bh)
-	__(jne 2f)
-	__(jump_builtin(_builtin_eql,2))
-1:	__(movl $t_value,%arg_z)
-	__(ret)
-2:	__(movl $nil_value,%arg_z)
+	__(jne 9f)
+        __(cmpb $subtag_macptr,%imm0_b)
+        __(je 1f)
+        __(cmpb $subtag_single_float,%imm0_b)
+        __(jne 2f)
+1:      __(movl misc_data_offset(%arg_y),%imm0)
+        __(cmpl misc_data_offset(%arg_z),%imm0)
+        __(movl $t_value,%arg_z)
+        __(movl $nil_value,%imm0)
+        __(cmovnel %imm0,%arg_z)
+        __(ret)
+2:      __(cmpb $subtag_double_float,%imm0_b)
+        __(jne 3f)
+        __(movl double_float.value(%arg_y),%imm0)
+        __(cmpl double_float.value(%arg_z),%imm0)
+        __(jne 9f)
+        __(movl double_float.value+node_size(%arg_y),%imm0)
+        __(cmpl double_float.value+node_size(%arg_z),%imm0)
+        __(movl $t_value,%arg_z)
+        __(movl $nil_value,%imm0)
+        __(cmovnel %imm0,%arg_z)
+        __(ret)
+3:      __(cmpb $subtag_ratio,%imm0_b)
+        __(je 4f)
+        __(cmpb $subtag_complex,%imm0_b)
+        __(jne 6f)
+4:      __(pushl %ebp)
+        __(pushl ratio.denom(%arg_y))
+        __(pushl ratio.denom(%arg_z))
+        __(movl ratio.numer(%arg_y),%arg_y)                        =

+        __(movl ratio.numer(%arg_z),%arg_z)
+        __(pushl $5f)
+        __(jmp 0b)
+__(tra(5))
+        __(compare_reg_to_nil(%arg_z))
+        __(popl %arg_z)
+        __(popl %arg_y)
+        __(popl %ebp)
+        __(je 9f)
+        __(jmp 0b)
+6:      __(cmpb $subtag_bignum,%imm0_b)
+        __(jne 9f)
+        __(getvheader(%arg_y,%imm0))
+        __(cmpl misc_header_offset(%arg_z),%imm0)
+        __(jne 9f)
+        __(header_length(%imm0,%temp0))
+7:      __(movl misc_data_offset-node_size(%arg_y,%temp0),%imm0)
+        __(cmpl misc_data_offset-node_size(%arg_z,%temp0),%imm0)
+        __(jne 9f)
+        __(subl $node_size,%temp0)
+        __(jne 7b)
+8:	__(movl $t_value,%arg_z)
+	__(ret)
+9:	__(movl $nil_value,%arg_z)
 	__(ret)
 _endsubp(builtin_eql)
 =


Modified: trunk/source/lisp-kernel/x86-spentry64.s
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/lisp-kernel/x86-spentry64.s (original)
+++ trunk/source/lisp-kernel/x86-spentry64.s Thu Apr  5 20:42:44 2012
@@ -3699,24 +3699,66 @@
 _endsubp(builtin_le)
 =

 _spentry(builtin_eql)
-	__(cmpq %arg_y,%arg_z)
-	__(je 1f)
+0:      __(cmpq %arg_y,%arg_z)
+	__(je 8f)
 	/* Not EQ.  Could only possibly be EQL if both are tag-misc  */
 	/* and both have the same subtag   */
 	__(extract_lisptag(%arg_y,%imm0))
 	__(extract_lisptag(%arg_z,%imm1))
 	__(cmpb $tag_misc,%imm0_b)
-	__(jne 2f)
+	__(jne 9f)
 	__(cmpb %imm0_b,%imm1_b)
-	__(jne 2f)
+	__(jne 9f)
 	__(extract_subtag(%arg_y,%imm0))
 	__(extract_subtag(%arg_z,%imm1))
 	__(cmpb %imm0_b,%imm1_b)
-	__(jne 2f)
-	__(jump_builtin(_builtin_eql,2))
-1:	__(movl $t_value,%arg_z_l)
-	__(ret)
-2:	__(movl $nil_value,%arg_z_l)
+	__(jne 9f)
+        __(cmpb $subtag_macptr,%imm0_b)
+        __(je 1f)
+        __(cmpb $subtag_double_float,%imm0_b)
+        __(jne 2f)
+1:      __(movq misc_data_offset(%arg_y),%imm0)
+        __(cmpq misc_data_offset(%arg_z),%imm0)
+        __(movl $t_value,%arg_z_l)
+        __(movl $nil_value,%imm0_l)
+        __(cmovnel %imm0_l,%arg_z_l)
+        __(ret)
+2:      __(cmpb $subtag_ratio,%imm0_b)
+        __(je 3f)
+        __(cmpb $subtag_complex,%imm0_b)
+        __(jne 5f)
+3:      __(pushq %rbp)
+        __(movq %rsp,%rsp)
+        __(pushq ratio.denom(%arg_y))
+        __(pushq ratio.denom(%arg_z))
+        __(movq ratio.numer(%arg_y),%arg_y)
+        __(movq ratio.numer(%arg_z),%arg_z)
+        __(lea 4f(%rip),%ra0)
+        __(pushq %ra0)
+        __(jmp 0b)
+__(tra(4))
+        __(compare_reg_to_nil(%arg_z))
+        __(popq %arg_z)
+        __(popq %arg_y)
+        __(popq %rbp)
+        __(je 9f)
+        __(jmp 0b)
+5:      __(cmpb $subtag_bignum,%imm0_b)
+        __(jne 9f)
+        __(getvheader(%arg_y,%imm2))
+        __(cmpq misc_header_offset(%arg_z),%imm2)
+        __(jne 9f)
+        __(shrq $num_subtag_bits,%imm2)
+        __(xorl %imm1_l,%imm1_l)
+6:      __(movl misc_data_offset(%arg_y,%imm1,4),%imm0_l)
+        __(cmpl misc_data_offset(%arg_z,%imm1,4),%imm0_l)
+        __(jne 9f)
+        __(addq $1,%imm1)
+        __(cmpq %imm1,%imm2)
+        __(jne 6b)
+8:	__(movl $t_value,%arg_z_l)
+	__(ret)
+9:	__(movl $nil_value,%arg_z_l)
 	__(ret)	=

 _endsubp(builtin_eql)
 =




More information about the Openmcl-cvs-notifications mailing list