Changeset 6316
- Timestamp:
- Apr 20, 2007, 2:02:56 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/x8664-call/ccl/lisp-kernel/x86-spentry64.s
r6253 r6316 37 37 jump_fname() 38 38 ]) 39 40 define([pop_jump_builtin],[ 41 pop %ra0 42 jump_builtin($1,$2) 43 ]) 44 39 45 40 46 _spentry(bad_funcall) … … 58 64 _endsubp(fix_overflow) 59 65 60 66 67 _spentry(nfix_overflow) 68 C(nfix_one_bit_overflow): 69 __(movq $two_digit_bignum_header,%imm0) 70 __(Misc_Alloc_Fixed([],aligned_bignum_size(2))) 71 __(unbox_fixnum(%arg_z,%imm0)) 72 __(movq $0xe000000000000000,%imm1) 73 __(mov %temp0,%arg_z) 74 __(xorq %imm1,%imm0) 75 __(movq %imm0,misc_data_offset(%arg_z)) 76 __(ret) 77 _endsubp(nfix_overflow) 78 61 79 /* Make a lisp integer (fixnum or two-digit bignum) from the signed */ 62 80 /* 64-bit value in %imm0. */ … … 75 93 0: __(jmp *%ra0) 76 94 _endsubp(makes64) 77 95 96 _spentry(nmakes64) 97 __(movq %imm0,%imm1) 98 __(shlq $fixnumshift,%imm1) 99 __(movq %imm1,%arg_z) 100 __(sarq $fixnumshift,%imm1) 101 __(cmpq %imm1,%imm0) 102 __(jz,pt 0f) 103 __(movd %imm0,%mm0) 104 __(movq $two_digit_bignum_header,%imm0) 105 __(Misc_Alloc_Fixed(%arg_z,aligned_bignum_size(2))) 106 __(movq %mm0,misc_data_offset(%arg_z)) 107 0: __(ret) 108 _endsubp(nmakes64) 109 78 110 79 111 /* %imm1:%imm0 constitute a signed integer, almost certainly a bignum. */ … … 119 151 _endfn 120 152 153 /* %imm1:%imm0 constitute a signed integer, almost certainly a bignum. */ 154 /* Make a lisp integer out of those 128 bits .. */ 155 156 _startfn(C(nmakes128)) 157 158 /* We're likely to have to make a bignum out of the integer in %imm1 and */ 159 /* %imm0. We'll need to use %imm0 and %imm1 to cons the bignum, and */ 160 /* will need to do some arithmetic (determining significant bigits) */ 161 /* on %imm0 and %imm1 in order to know how large that bignum needs to be. */ 162 /* Cache %imm0 and %imm1 in %mm0 and %mm1. */ 163 164 __(movd %imm0,%mm0) 165 __(movd %imm1,%mm1) 166 167 /* If %imm1 is just a sign extension of %imm0, make a 64-bit signed integer. */ 168 169 __(sarq $63,%imm0) 170 __(cmpq %imm0,%imm1) 171 __(movd %mm0,%imm0) 172 __(je _SPnmakes64) 173 174 /* Otherwise, if the high 32 bits of %imm1 are a sign-extension of the */ 175 /* low 32 bits of %imm1, make a 3-digit bignum. If the upper 32 bits */ 176 /* of %imm1 are significant, make a 4 digit bignum */ 177 178 __(movq %imm1,%imm0) 179 __(shlq $32,%imm0) 180 __(sarq $32,%imm0) 181 __(cmpq %imm0,%imm1) 182 __(jz 3f) 183 __(mov $four_digit_bignum_header,%imm0) 184 __(Misc_Alloc_Fixed(%arg_z,aligned_bignum_size(4))) 185 __(movq %mm0,misc_data_offset(%arg_z)) 186 __(movq %mm1,misc_data_offset+8(%arg_z)) 187 __(ret) 188 3: __(mov $three_digit_bignum_header,%imm0) 189 __(Misc_Alloc_Fixed(%arg_z,aligned_bignum_size(3))) 190 __(movq %mm0,misc_data_offset(%arg_z)) 191 __(movd %mm1,misc_data_offset+8(%arg_z)) 192 __(ret) 193 _endfn 194 121 195 /* %imm1:%imm0 constitute an unsigned integer, almost certainly a bignum. */ 122 196 /* Make a lisp integer out of those 128 bits .. */ … … 4604 4678 __(jmp 8b) 4605 4679 _endsubp(aset3) 4680 4606 4681 4682 /* %arg_z <- %arg_y + %arg_z. Do the fixnum case - including overflow - */ 4683 /* inline. Call out otherwise. */ 4684 _spentry(nbuiltin_plus) 4685 __(movb %arg_z_b,%imm0_b) 4686 __(orb %arg_y_b,%imm0_b) 4687 __(testb $fixnummask,%imm0_b) 4688 __(jne 1f) 4689 __(addq %arg_y,%arg_z) 4690 __(jo,pn C(nfix_one_bit_overflow)) 4691 __(ret) 4692 1: __(pop_jump_builtin(_builtin_plus,2)) 4693 _endsubp(nbuiltin_plus) 4694 4695 4696 /* %arg_z <- %arg_z - %arg_y. Do the fixnum case - including overflow - */ 4697 /* inline. Call out otherwise. */ 4698 _spentry(nbuiltin_minus) 4699 __(movb %arg_z_b,%imm0_b) 4700 __(orb %arg_y_b,%imm0_b) 4701 __(testb $fixnummask,%imm0_b) 4702 __(jne 1f) 4703 __(xchgq %arg_y,%arg_z) 4704 __(subq %arg_y,%arg_z) 4705 __(jo,pn C(nfix_one_bit_overflow)) 4706 __(ret) 4707 1: __(pop_jump_builtin(_builtin_minus,2)) 4708 _endsubp(nbuiltin_minus) 4709 4710 /* %arg_z <- %arg_z * %arg_y. Do the fixnum case - including overflow - */ 4711 /* inline. Call out otherwise. */ 4712 _spentry(nbuiltin_times) 4713 __(movb %arg_z_b,%imm0_b) 4714 __(orb %arg_y_b,%imm0_b) 4715 __(testb $fixnummask,%imm0_b) 4716 __(jne 2f) 4717 __(unbox_fixnum(%arg_z,%imm0)) 4718 /* 128-bit fixnum result in %imm1:%imm0. Overflow set if %imm1 */ 4719 /* is significant */ 4720 __(imul %arg_y) 4721 __(jo 1f) 4722 __(mov %imm0,%arg_z) 4723 __(ret) 4724 1: __(unbox_fixnum(%arg_z,%imm0)) 4725 __(unbox_fixnum(%arg_y,%imm1)) 4726 __(imul %imm1) 4727 __(jmp C(nmakes128)) 4728 2: __(pop_jump_builtin(_builtin_times,2)) 4729 _endsubp(nbuiltin_times) 4730 4731 _spentry(nbuiltin_div) 4732 __(pop_jump_builtin(_builtin_div,2)) 4733 4734 /* %arg_z <- (= %arg_y %arg_z). */ 4735 _spentry(nbuiltin_eq) 4736 __(movb %arg_z_b,%imm0_b) 4737 __(orb %arg_y_b,%imm0_b) 4738 __(testb $fixnummask,%imm0_b) 4739 __(jne 1f) 4740 __(rcmpq(%arg_z,%arg_y)) 4741 __(condition_to_boolean(e,%imm0,%arg_z)) 4742 __(ret) 4743 1: __(pop_jump_builtin(_builtin_eq,2)) 4744 _endsubp(nbuiltin_eq) 4745 4746 /* %arg_z <- (/= %arg_y %arg_z). */ 4747 _spentry(nbuiltin_ne) 4748 __(movb %arg_z_b,%imm0_b) 4749 __(orb %arg_y_b,%imm0_b) 4750 __(testb $fixnummask,%imm0_b) 4751 __(jne 1f) 4752 __(rcmpq(%arg_z,%arg_y)) 4753 __(condition_to_boolean(ne,%imm0,%arg_z)) 4754 __(ret) 4755 1: __(pop_jump_builtin(_builtin_ne,2)) 4756 _endsubp(nbuiltin_ne) 4757 4758 /* %arg_z <- (> %arg_y %arg_z). */ 4759 _spentry(nbuiltin_gt) 4760 __(movb %arg_z_b,%imm0_b) 4761 __(orb %arg_y_b,%imm0_b) 4762 __(testb $fixnummask,%imm0_b) 4763 __(jne 1f) 4764 __(rcmpq(%arg_y,%arg_z)) 4765 __(condition_to_boolean(g,%imm0,%arg_z)) 4766 __(ret) 4767 1: __(pop_jump_builtin(_builtin_gt,2)) 4768 _endsubp(nbuiltin_gt) 4769 4770 /* %arg_z <- (>= %arg_y %arg_z). */ 4771 _spentry(nbuiltin_ge) 4772 __(movb %arg_z_b,%imm0_b) 4773 __(orb %arg_y_b,%imm0_b) 4774 __(testb $fixnummask,%imm0_b) 4775 __(jne 1f) 4776 __(rcmpq(%arg_y,%arg_z)) 4777 __(condition_to_boolean(ge,%imm0,%arg_z)) 4778 __(ret) 4779 1: __(pop_jump_builtin(_builtin_ge,2)) 4780 _endsubp(nbuiltin_ge) 4781 4782 /* %arg_z <- (< %arg_y %arg_z). */ 4783 _spentry(nbuiltin_lt) 4784 __(movb %arg_z_b,%imm0_b) 4785 __(orb %arg_y_b,%imm0_b) 4786 __(testb $fixnummask,%imm0_b) 4787 __(jne 1f) 4788 __(rcmpq(%arg_y,%arg_z)) 4789 __(condition_to_boolean(l,%imm0,%arg_z)) 4790 __(ret) 4791 1: __(pop_jump_builtin(_builtin_lt,2)) 4792 _endsubp(nbuiltin_lt) 4793 4794 /* %arg_z <- (<= %arg_y %arg_z). */ 4795 _spentry(nbuiltin_le) 4796 __(movb %arg_z_b,%imm0_b) 4797 __(orb %arg_y_b,%imm0_b) 4798 __(testb $fixnummask,%imm0_b) 4799 __(jne 1f) 4800 __(rcmpq(%arg_y,%arg_z)) 4801 __(condition_to_boolean(le,%imm0,%arg_z)) 4802 __(ret) 4803 1: __(pop_jump_builtin(_builtin_le,2)) 4804 _endsubp(nbuiltin_le) 4805 4806 _spentry(nbuiltin_eql) 4807 __(cmpq %arg_y,%arg_z) 4808 __(je 1f) 4809 /* Not EQ. Could only possibly be EQL if both are tag-misc */ 4810 /* and both have the same subtag */ 4811 __(extract_lisptag(%arg_y,%imm0)) 4812 __(extract_lisptag(%arg_z,%imm1)) 4813 __(cmpb $tag_misc,%imm0_b) 4814 __(jne 2f) 4815 __(cmpb %imm0_b,%imm1_b) 4816 __(jne 2f) 4817 __(extract_subtag(%arg_y,%imm0_b)) 4818 __(extract_subtag(%arg_z,%imm1_b)) 4819 __(cmpb %imm0_b,%imm1_b) 4820 __(jne 2f) 4821 __(pop_jump_builtin(_builtin_eql,2)) 4822 1: __(movl $t_value,%arg_z_l) 4823 __(ret) 4824 2: __(movl $nil_value,%arg_z_l) 4825 __(ret) 4826 _endsubp(nbuiltin_eql) 4827 4828 _spentry(nbuiltin_length) 4829 __(extract_lisptag(%arg_z,%imm0)) 4830 __(cmpb $tag_list,%imm0_b) 4831 __(jz 2f) 4832 __(cmpb $tag_misc,%imm0_b) 4833 __(jnz 8f) 4834 __(extract_subtag(%arg_z,%imm0_b)) 4835 __(rcmpb(%imm0_b,$min_vector_subtag)) 4836 __(jb 8f) 4837 __(je 1f) 4838 /* (simple-array * (*)) */ 4839 __(movq %arg_z,%arg_y) 4840 __(vector_length(%arg_y,%arg_z)) 4841 __(ret) 4842 1: /* vector header */ 4843 __(movq vectorH.logsize(%arg_z),%arg_z) 4844 __(ret) 4845 2: /* list. Maybe null, maybe dotted or circular. */ 4846 __(movq $-fixnumone,%temp2) 4847 __(movq %arg_z,%temp0) /* fast pointer */ 4848 __(movq %arg_z,%temp1) /* slow pointer */ 4849 3: __(extract_lisptag(%temp0,%imm0)) 4850 __(compare_reg_to_nil(%temp0)) 4851 __(leaq fixnumone(%temp2),%temp2) 4852 __(je 9f) 4853 __(cmpb $tag_list,%imm0_b) 4854 __(jne 8f) 4855 __(extract_lisptag(%temp1,%imm1)) 4856 __(testb $fixnumone,%temp2_b) 4857 __(_cdr(%temp0,%temp0)) 4858 __(je 3b) 4859 __(cmpb $tag_list,%imm1_b) 4860 __(jne 8f) 4861 __(_cdr(%temp1,%temp1)) 4862 __(cmpq %temp0,%temp1) 4863 __(jne 3b) 4864 8: 4865 __(pop_jump_builtin(_builtin_length,1)) 4866 9: 4867 __(movq %temp2,%arg_z) 4868 __(ret) 4869 _endsubp(nbuiltin_length) 4870 4871 4872 _spentry(nbuiltin_seqtype) 4873 __(extract_lisptag(%arg_z,%imm0)) 4874 __(cmpb $tag_list,%imm0_b) 4875 __(jz 1f) 4876 __(cmpb $tag_misc,%imm0_b) 4877 __(jne 2f) 4878 __(movb misc_subtag_offset(%arg_z),%imm0_b) 4879 __(rcmpb(%imm0_b,$min_vector_subtag)) 4880 __(jb 2f) 4881 __(movl $nil_value,%arg_z_l) 4882 __(ret) 4883 1: __(movl $t_value,%arg_z_l) 4884 __(ret) 4885 2: 4886 __(pop_jump_builtin(_builtin_seqtype,1)) 4887 _endsubp(nbuiltin_seqtype) 4888 4889 _spentry(nbuiltin_assq) 4890 __(cmpb $fulltag_nil,%arg_z_b) 4891 __(jz 5f) 4892 1: __(movb $tagmask,%imm0_b) 4893 __(andb %arg_z_b,%imm0_b) 4894 __(cmpb $tag_list,%imm0_b) 4895 __(jz,pt 2f) 4896 __(uuo_error_reg_not_list(Rarg_z)) 4897 2: __(_car(%arg_z,%arg_x)) 4898 __(_cdr(%arg_z,%arg_z)) 4899 __(cmpb $fulltag_nil,%arg_x_b) 4900 __(jz 4f) 4901 __(movb $tagmask,%imm0_b) 4902 __(andb %arg_x_b,%imm0_b) 4903 __(cmpb $tag_list,%imm0_b) 4904 __(jz,pt 3f) 4905 __(uuo_error_reg_not_list(Rarg_x)) 4906 3: __(_car(%arg_x,%temp0)) 4907 __(cmpq %temp0,%arg_y) 4908 __(jnz 4f) 4909 __(movq %arg_x,%arg_z) 4910 __(ret) 4911 4: __(cmpb $fulltag_nil,%arg_z_b) 4912 5: __(jnz 1b) 4913 __(ret) 4914 _endsubp(nbuiltin_assq) 4915 4916 _spentry(nbuiltin_memq) 4917 __(cmpb $fulltag_nil,%arg_z_b) 4918 __(jmp 3f) 4919 1: __(movb $tagmask,%imm0_b) 4920 __(andb %arg_z_b,%imm0_b) 4921 __(cmpb $tag_list,%imm0_b) 4922 __(jz,pt 2f) 4923 __(uuo_error_reg_not_list(Rarg_z)) 4924 2: __(_car(%arg_z,%arg_x)) 4925 __(_cdr(%arg_z,%temp0)) 4926 __(cmpq %arg_x,%arg_y) 4927 __(jz 4f) 4928 __(cmpb $fulltag_nil,%temp0_b) 4929 __(movq %temp0,%arg_z) 4930 3: __(jnz 1b) 4931 4: __(ret) 4932 _endsubp(nbuiltin_memq) 4933 4934 4935 _spentry(nbuiltin_logbitp) 4936 __(movb %arg_z_b,%imm0_b) 4937 __(orb %arg_y_b,%imm0_b) 4938 __(testb $fixnummask,%imm0_b) 4939 __(jnz 1f) 4940 __(unbox_fixnum(%arg_y,%imm0)) 4941 __(movl $logbitp_max_bit-1+fixnumshift,%imm1_l) 4942 __(js 1f) /* bit number negative */ 4943 __(addb $fixnumshift,%imm0_b) 4944 __(cmpq $logbitp_max_bit<<fixnumshift,%arg_y) 4945 __(cmovael %imm1_l,%imm0_l) 4946 __(bt %imm0,%arg_z) 4947 __(condition_to_boolean(b,%imm0,%arg_z)) 4948 __(ret) 4949 1: __(pop_jump_builtin(_builtin_logbitp,2)) 4950 _endsubp(nbuiltin_logbitp) 4951 4952 _spentry(nbuiltin_logior) 4953 __(movb %arg_y_b,%imm0_b) 4954 __(orb %arg_z_b,%imm0_b) 4955 __(testb $fixnummask,%imm0_b) 4956 __(jne 1f) 4957 __(orq %arg_y,%arg_z) 4958 __(ret) 4959 1: 4960 __(pop_jump_builtin(_builtin_logior,2)) 4961 4962 _endsubp(nbuiltin_logior) 4963 4964 _spentry(nbuiltin_logand) 4965 __(movb %arg_y_b,%imm0_b) 4966 __(orb %arg_z_b,%imm0_b) 4967 __(testb $fixnummask,%imm0_b) 4968 __(jne 1f) 4969 __(andq %arg_y,%arg_z) 4970 __(ret) 4971 1: 4972 __(pop_jump_builtin(_builtin_logand,2)) 4973 _endsubp(nbuiltin_logand) 4974 4975 _spentry(nbuiltin_negate) 4976 __(testb $fixnummask,%arg_z_b) 4977 __(jne 1f) 4978 __(negq %arg_z) 4979 __(jo,pn C(nfix_one_bit_overflow)) 4980 __(ret) 4981 1: 4982 __(pop_jump_builtin(_builtin_negate,1)) 4983 _endsubp(nbuiltin_negate) 4984 4985 _spentry(nbuiltin_logxor) 4986 __(movb %arg_y_b,%imm0_b) 4987 __(orb %arg_z_b,%imm0_b) 4988 __(testb $fixnummask,%imm0_b) 4989 __(jne 1f) 4990 __(xorq %arg_y,%arg_z) 4991 __(ret) 4992 1: 4993 __(pop_jump_builtin(_builtin_logxor,2)) 4994 _endsubp(nbuiltin_logxor) 4995 4996 4997 _spentry(nbuiltin_aset1) 4998 __(pop %ra0) /* for now */ 4999 __(extract_typecode(%arg_x,%imm0)) 5000 __(box_fixnum(%imm0,%temp0)) 5001 __(cmpb $min_vector_subtag,%imm0_b) 5002 __(ja _SPsubtag_misc_set) 5003 __(jump_builtin(_builtin_aset1,3)) 5004 _endsubp(nbuiltin_aset1) 5005 5006 /* We have to be a little careful here %cl has to be used for */ 5007 /* the (unboxed) shift count in all variable-length shifts, and */ 5008 /* %temp2 = %rcx. Zero all but the low 8 (or 6) bits of %rcx, */ 5009 /* so that the shift count doesn't confuse the GC. */ 5010 5011 _spentry(nbuiltin_ash) 5012 __(movb %arg_y_b,%imm0_b) 5013 __(orb %arg_z_b,%imm0_b) 5014 __(testb $fixnummask,%imm0_b) 5015 __(jne 9f) 5016 __(unbox_fixnum(%arg_y,%imm1)) 5017 __(unbox_fixnum(%arg_z,%imm0)) 5018 /* Z flag set if zero ASH shift count */ 5019 __(jnz 1f) 5020 __(movq %arg_y,%arg_z) /* shift by 0 */ 5021 __(jmp *%ra0) 5022 1: __(jns 3f) 5023 __(rcmpq(%imm0,$-63)) 5024 __(jg 2f) 5025 __(sar $63,%imm1) 5026 __(box_fixnum(%imm1,%arg_z)) 5027 __(ret) 5028 2: /* Right-shift by small fixnum */ 5029 __(negb %imm0_b) 5030 __(movzbl %imm0_b,%ecx) 5031 __(sar %cl,%imm1) 5032 __(xorl %ecx,%ecx) 5033 __(box_fixnum(%imm1,%arg_z)) 5034 __(ret) 5035 3: /* Left shift by fixnum. We cant shift by more than 63 bits, though */ 5036 /* shifting by 64 is actually easy. */ 5037 __(rcmpq(%imm0,$64)) 5038 __(jg 9f) 5039 __(jne 4f) 5040 /* left-shift by 64-bits exactly */ 5041 __(xorl %imm0_l,%imm0_l) 5042 __(jmp C(nmakes128)) 5043 4: /* left-shift by 1..63 bits. Safe to move shift count to %rcx/%cl */ 5044 __(movzbl %imm0_b,%ecx) /* zero-extending mov */ 5045 __(movq %imm1,%imm0) 5046 __(sarq $63,%imm1) 5047 __(js 5f) 5048 __(shld %cl,%imm0,%imm1) 5049 __(shl %cl,%imm0) 5050 __(xorb %cl,%cl) 5051 __(jmp C(nmakes128)) 5052 5: __(shld %cl,%imm0,%imm1) 5053 __(shl %cl,%imm0) 5054 __(xorb %cl,%cl) 5055 __(jmp C(nmakes128)) 5056 9: 5057 __(pop_jump_builtin(_builtin_ash,2)) 5058 _endsubp(nbuiltin_ash) 5059 5060 _spentry(nbuiltin_aref1) 5061 __(pop %ra0) /* for now */ 5062 __(extract_typecode(%arg_y,%imm0)) 5063 __(cmpb $min_vector_subtag,%imm0_b) 5064 __(box_fixnum_no_flags(%imm0,%arg_x)) 5065 __(ja _SPsubtag_misc_ref) 5066 __(jump_builtin(_builtin_aref1,2)) 5067 _endsubp(nbuiltin_aref1) 5068 5069 5070 _spentry(nmakeu64) 5071 __(movq %imm0,%imm1) 5072 __(shlq $fixnumshift+1,%imm1) 5073 __(movq %imm1,%arg_z) /* Tagged as a fixnum, 2x */ 5074 __(shrq $fixnumshift+1,%imm1) 5075 __(shrq %arg_z) 5076 __(cmpq %imm0,%imm1) 5077 __(je 9f) 5078 __(testq %imm0,%imm0) 5079 __(movd %imm0,%mm0) 5080 __(js 3f) 5081 /* Make a 2-digit bignum. */ 5082 __(movl $two_digit_bignum_header,%imm0_l) 5083 __(movl $aligned_bignum_size(2),%imm1_l) 5084 __(Misc_Alloc(%arg_z)) 5085 __(movq %mm0,misc_data_offset(%arg_z)) 5086 __(jmp *%ra0) 5087 3: __(movl $three_digit_bignum_header,%imm0_l) 5088 __(movl $aligned_bignum_size(3),%imm1_l) 5089 __(Misc_Alloc(%arg_z)) 5090 __(movq %mm0,misc_data_offset(%arg_z)) 5091 9: __(ret) 5092 _endsubp(nmakeu64) 5093 5094 /* on entry: arg_z = symbol. On exit, arg_z = value (possibly */ 5095 /* unbound_marker), arg_y = symbol */ 5096 _spentry(nspecref) 5097 __(movq symbol.binding_index(%arg_z),%imm0) 5098 __(cmp %rcontext:tcr.tlb_limit,%imm0) 5099 __(movq %rcontext:tcr.tlb_pointer,%imm1) 5100 __(movq %arg_z,%arg_y) 5101 __(jae 7f) 5102 __(movq (%imm1,%imm0),%arg_z) 5103 __(cmpb $no_thread_local_binding_marker,%arg_z_b) 5104 __(jne 8f) 5105 7: __(movq symbol.vcell(%arg_y),%arg_z) 5106 8: __(ret) 5107 _endsubp(nspecref) 5108 5109 /* arg_y = special symbol, arg_z = new value. */ 5110 _spentry(nspecset) 5111 __(movq symbol.binding_index(%arg_y),%imm0) 5112 __(cmp %rcontext:tcr.tlb_limit,%imm0) 5113 __(movq %rcontext:tcr.tlb_pointer,%imm1) 5114 __(jae 1f) 5115 __(movq (%imm1,%imm0),%arg_x) 5116 __(cmpb $no_thread_local_binding_marker,%arg_x_b) 5117 __(je 1f) 5118 __(movq %arg_z,(%imm1,%imm0)) 5119 __(ret) 5120 1: __(lea fulltag_misc-fulltag_symbol(%arg_y),%arg_x) 5121 __(movq $1<<fixnumshift,%arg_y) 5122 __(pop %ra0) 5123 __(jmp _SPgvset) 5124 _endsubp(nspecset) 5125 5126 _spentry(nspecrefcheck) 5127 __(movq symbol.binding_index(%arg_z),%imm0) 5128 __(cmp %rcontext:tcr.tlb_limit,%imm0) 5129 __(movq %rcontext:tcr.tlb_pointer,%imm1) 5130 __(movq %arg_z,%arg_y) 5131 __(jae 7f) 5132 __(movq (%imm1,%imm0),%arg_z) 5133 __(cmpb $no_thread_local_binding_marker,%arg_z_b) 5134 __(jne 8f) 5135 7: __(movq symbol.vcell(%arg_y),%arg_z) 5136 8: __(cmpb $unbound_marker,%arg_z_b) 5137 __(jne,pt 9f) 5138 __(uuo_error_reg_unbound(Rarg_y)) 5139 9: __(ret) 5140 _endsubp(nspecrefcheck) 5141 4607 5142 4608 5143 _spentry(poweropen_callbackX)
Note:
See TracChangeset
for help on using the changeset viewer.
