Changeset 7222
 Timestamp:
 Sep 14, 2007, 9:55:41 PM (12 years ago)
 File:

 1 edited
Legend:
 Unmodified
 Added
 Removed

branches/ia32/compiler/X86/X8632/x8632vinsns.lisp
r7133 r7222 174 174 (movsd (:%xmm val) (:@ (:apply + x8632::miscdfloatoffset (:apply ash idx 3)) (:%l v)))) 175 175 176 ;;; XXX need to work out dealing with :self in vinsns177 176 (definex8632vinsn (callknownsymbol :call) (((result (:lisp x8632::arg_z))) 178 177 () … … 180 179 (:talign x8632::fulltagtra) 181 180 (call (:@ x8632::symbol.fcell (:% x8632::fname))) 182 (movl (:self) (:%l x8632::fn))) 181 (movl (:$self 0) (:%l x8632::fn))) 182 183 (definex8632vinsn (jumpknownsymbol :jumplr) (() 184 ()) 185 186 (jmp (:@ x8632::symbol.fcell (:% x8632::fname)))) 183 187 184 188 (definex8632vinsn setnargs (() … … 600 604 (andw (:$w (ash x8632::fulltagmask x8632::fixnumshift)) (:%w tag))) 601 605 602 (definex8632vinsn extracttypecode (((tag : u32))606 (definex8632vinsn extracttypecode (((tag :imm)) 603 607 ((object :lisp))) 604 608 (movl (:%l object) (:%l tag)) 605 (andw (:$w x8632::tagmask) (:%w tag)) 606 (cmpw (:$w x8632::tagmisc) (:%w tag)) 609 ((:pred <= (:apply %hardregspecvalue tag) x8632::ebx) 610 (andb (:$b x8632::tagmask) (:%b tag)) 611 (cmpb (:$b x8632::tagmisc) (:%b tag))) 612 ((:pred > (:apply %hardregspecvalue tag) x8632::ebx) 613 (andl (:$l x8632::tagmask) (:%l tag)) 614 (cmpl (:$l x8632::tagmisc) (:%l tag))) 607 615 (jne :havetag) 608 616 ((:pred <= (:apply %hardregspecvalue tag) x8632::ebx) 609 617 (movb (:@ x8632::miscsubtagoffset (:%l object)) (:%b tag))) 610 618 ((:pred > (:apply %hardregspecvalue tag) x8632::ebx) 611 (mov w (:@ x8632::miscsubtagoffset (:%l object)) (:%wtag)))619 (movl (:@ x8632::miscsubtagoffset (:%l object)) (:%l tag))) 612 620 :havetag) 613 621 … … 664 672 (definex8632vinsn cons (((dest :lisp)) 665 673 ((car :lisp) 666 (cdr :lisp))) 674 (cdr :lisp)) 675 ((allocptr (:lisp #.x8632::allocptr)))) 667 676 (subl (:$b ( x8632::cons.size x8632::fulltagcons)) (:@ (:%seg :rcontext) x8632::tcr.saveallocptr)) 668 677 (movl (:@ (:%seg :rcontext) x8632::tcr.saveallocptr) (:%l x8632::allocptr)) … … 829 838 (:talign x8632::fulltagtra) 830 839 (call (:@ spno)) 831 (movl (: self) (:% x8632::fn)))840 (movl (:$self 0) (:% x8632::fn))) 832 841 833 842 (definex8632vinsn fixnumsubtractfrom (((dest t) … … 882 891 (negl (:% val))) 883 892 893 ;;; setbigitsandheaderforfixnumoverflow 894 895 (definex8632vinsn %setzflagifs32fitsinfixnum (((dest :imm)) 896 ((src :s32)) 897 ((temp :s32))) 898 (movl (:%l src) (:%l temp)) 899 (shll (:$ub x8632::fixnumshift) (:%l temp)) 900 (movl (:%l temp) (:%l dest)) ; tagged as a fixnum 901 (sarl (:$ub x8632::fixnumshift) (:%l temp)) 902 (cmpl (:%l src) (:%l temp))) 903 904 (definex8632vinsn %setzflagifu32fitsinfixnum (((dest :imm)) 905 ((src :u32)) 906 ((temp :u32))) 907 (movl (:%l src) (:%l temp)) 908 (shll (:$ub (1+ x8632::fixnumshift)) (:%l temp)) 909 (movl (:%l temp) (:%l dest)) ; tagged as an even fixnum 910 (shrl (:$ub (1+ x8632::fixnumshift)) (:%l temp)) 911 (shrl (:%l dest)) 912 (cmpl (:%l src) (:%l temp)) 913 :done) 914 915 ;;; setupbignumallocfors32overflow 916 ;;; setupbignumallocforu32overflow 917 918 ;;; the uuoalloc code looks at these exact registers 919 ;;; header and size are actually args, not temporaries, 920 ;;; but it appears that there's isn't a way to enforce 921 ;;; register usage on vinsn args. 922 ;; (definex832vinsn %allocateuvector (((dest :lisp)) 923 ;; () 924 ;; ((header (:u32 #.x8632::eax)) 925 ;; (size (:u32 #.x8632::edx)) 926 ;; (freeptr (:lisp #.x8632::allocptr)))) 927 ;; (subl (:%l size) (:@ (:%seg :rcontext) x8632::tcr.saveallocptr)) 928 ;; (movl (:@ (:%seg :rcontext) x8632::tcr.saveallocptr) (%l freeptr)) 929 ;; (rcmpl (:%l freeptr) (:@ (:%seg :rcontext) x8632::tcr.saveallocbase)) 930 ;; (jg :notrap) 931 ;; (uuoalloc) 932 ;; :notrap 933 ;; (movl (:%l header) (:@ x8632::mischeaderoffset (:%l freeptr))) 934 ;; (andb (:$b (lognot x8632::fulltagmask)) (:@ (:%seg :rcontext) x8632::tcr.saveallocptr)) 935 ;; ((:not (:pred = freeptr 936 ;; (:apply %hardregspecvalue dest))) 937 ;; (movl (:%l freeptr) (%l dest)))) 938 939 (definex8632vinsn setbigitsafterfixnumoverflow (() 940 ((bignum :lisp))) 941 (movq (:%mmx x8664::mm0) (:@ x8632::miscdataoffset (:%l bignum)))) 942 943 (definex8632vinsn boxfixnum (((dest :imm)) 944 ((src :s32))) 945 ;;(imull (:$b x8632::fixnumone) (:%l src) (:%l dest)) 946 (leal (:@ (:%l src) x8632::fixnumone) (:%l dest))) 947 948 ;;; fixfixnumoverflowool 949 ;;; fixfixnumoverflowoolandbranch 950 951 (definex8632vinsn (fixfixnumoverflowoolandbranch :call) 952 (((val :lisp)) 953 ((val :lisp) 954 (lab :label)) 955 ((unboxed (:s32 #.x8664::imm1)) 956 (header (:u32 #.x8664::imm0)) 957 (entry (:label 1)))) 958 (jno.pt lab) 959 ((:not (:pred = x8632::arg_z 960 (:apply %hardregspecvalue val))) 961 (movl (:%l val) (:%l x8632::arg_z))) 962 (:talign 5) 963 (call (:@ .SPfixoverflow)) 964 (movl (:$self 0) (:%l x8632::fn)) 965 ((:not (:pred = x8632::arg_z 966 (:apply %hardregspecvalue val))) 967 (movl (:%l x8632::arg_z) (:%l val))) 968 (jmp lab)) 969 970 971 (definex8632vinsn addconstant (((dest :imm)) 972 ((dest :imm) 973 (const :s32const))) 974 ((:and (:pred >= const 128) (:pred <= const 127)) 975 (addl (:$b const) (:%l dest))) 976 ((:not (:and (:pred >= const 128) (:pred <= const 127))) 977 (addl (:$l const) (:%l dest)))) 978 979 (definex8632vinsn addconstant3 (((dest :imm)) 980 ((src :imm) 981 (const :s32const))) 982 ((:pred = (:apply %hardregspecvalue dest) 983 (:apply %hardregspecvalue src)) 984 ((:and (:pred >= const 128) (:pred <= const 127)) 985 (addl (:$b const) (:%l dest))) 986 ((:not (:and (:pred >= const 128) (:pred <= const 127))) 987 (addl (:$l const) (:%l dest)))) 988 ((:not (:pred = (:apply %hardregspecvalue dest) 989 (:apply %hardregspecvalue src))) 990 (leal (:@ const (:%l src)) (:%l dest)))) 991 992 (definex8632vinsn fixnumadd2 (((dest :imm)) 993 ((dest :imm) 994 (other :imm))) 995 (addl (:%l other) (:%l dest))) 996 997 (definex8632vinsn fixnumsub2 (((dest :imm)) 998 ((x :imm) 999 (y :imm)) 1000 ((temp :imm))) 1001 (movl (:%l x) (:%l temp)) 1002 (subl (:%l y) (:%l temp)) 1003 (movl (:%l temp) (:%l dest))) 1004 1005 (definex8632vinsn fixnumadd3 (((dest :imm)) 1006 ((x :imm) 1007 (y :imm))) 1008 1009 ((:pred = 1010 (:apply %hardregspecvalue x) 1011 (:apply %hardregspecvalue dest)) 1012 (addl (:%l y) (:%l dest))) 1013 ((:not (:pred = 1014 (:apply %hardregspecvalue x) 1015 (:apply %hardregspecvalue dest))) 1016 ((:pred = 1017 (:apply %hardregspecvalue y) 1018 (:apply %hardregspecvalue dest)) 1019 (addl (:%l x) (:%l dest))) 1020 ((:not (:pred = 1021 (:apply %hardregspecvalue y) 1022 (:apply %hardregspecvalue dest))) 1023 (leal (:@ (:%l x) (:%l y)) (:%l dest))))) 1024 1025 (definex8632vinsn copygpr (((dest t)) 1026 ((src t))) 1027 ((:not (:pred = 1028 (:apply %hardregspecvalue dest) 1029 (:apply %hardregspecvalue src))) 1030 (movl (:%l src) (:%l dest)))) 1031 1032 (definex8632vinsn (vpopregister :pop :node :vsp) 1033 (((dest :lisp)) 1034 ()) 1035 (popl (:%l dest))) 1036 1037 (definex8632vinsn (pushargregs :push :node :vsp) (() 1038 ()) 1039 (rcmpw (:%w x8632::nargs) (:$w (* 1 x8632::nodesize))) 1040 (jb :done) 1041 (je :one) 1042 (pushl (:%l x8632::arg_y)) 1043 :one 1044 (pushl (:%l x8632::arg_z)) 1045 :done) 1046 1047 (definex8632vinsn (pushmaxargregs :push :node :vsp) (() 1048 ((max :u32const))) 1049 ((:pred >= max 2) 1050 (rcmpw (:%w x8632::nargs) (:$w (* 1 x8632::nodesize))) 1051 (jb :done) 1052 (je :one) 1053 (pushl (:%l x8632::arg_y)) 1054 :one 1055 (pushl (:%l x8632::arg_z)) 1056 :done) 1057 ((:pred = max 1) 1058 (testw (:%w x8632::nargs) (:%w x8632::nargs)) 1059 (je :done) 1060 (pushl (:%l x8632::arg_z)) 1061 :done)) 1062 1063 (definex8632vinsn (calllabel :call) (() 1064 ((label :label)) 1065 ((entry (:label 1)))) 1066 (:talign 5) 1067 (call label) 1068 (movl (:$self 0) (:%l x8632::fn))) 1069 1070 (definex8632vinsn doublefloatcompare (() 1071 ((arg0 :doublefloat) 1072 (arg1 :doublefloat))) 1073 (comisd (:%xmm arg1) (:%xmm arg0))) 1074 1075 (definex8632vinsn singlefloatcompare (() 1076 ((arg0 :singlefloat) 1077 (arg1 :singlefloat))) 1078 (comiss (:%xmm arg1) (:%xmm arg0))) 1079 1080 (definex8632vinsn doublefloat+2 (((result :doublefloat)) 1081 ((x :doublefloat) 1082 (y :doublefloat))) 1083 ((:pred = 1084 (:apply %hardregspecvalue result) 1085 (:apply %hardregspecvalue x)) 1086 (addsd (:%xmm y) (:%xmm result))) 1087 ((:and (:not (:pred = 1088 (:apply %hardregspecvalue result) 1089 (:apply %hardregspecvalue x))) 1090 (:pred = 1091 (:apply %hardregspecvalue result) 1092 (:apply %hardregspecvalue y))) 1093 (addsd (:%xmm x) (:%xmm result))) 1094 ((:and (:not (:pred = 1095 (:apply %hardregspecvalue result) 1096 (:apply %hardregspecvalue x))) 1097 (:not (:pred = 1098 (:apply %hardregspecvalue result) 1099 (:apply %hardregspecvalue y)))) 1100 (movsd (:%xmm x) (:%xmm result)) 1101 (addsd (:%xmm y) (:%xmm result)))) 1102 1103 ;;; Caller guarantees (not (eq y result)) 1104 (definex8632vinsn doublefloat2 (((result :doublefloat)) 1105 ((x :doublefloat) 1106 (y :doublefloat))) 1107 ((:not (:pred = (:apply %hardregspecvalue result) 1108 (:apply %hardregspecvalue x))) 1109 (movsd (:%xmm x) (:%xmm result))) 1110 (subsd (:%xmm y) (:%xmm result))) 1111 1112 (definex8632vinsn doublefloat*2 (((result :doublefloat)) 1113 ((x :doublefloat) 1114 (y :doublefloat))) 1115 ((:pred = 1116 (:apply %hardregspecvalue result) 1117 (:apply %hardregspecvalue x)) 1118 (mulsd (:%xmm y) (:%xmm result))) 1119 ((:and (:not (:pred = 1120 (:apply %hardregspecvalue result) 1121 (:apply %hardregspecvalue x))) 1122 (:pred = 1123 (:apply %hardregspecvalue result) 1124 (:apply %hardregspecvalue y))) 1125 (mulsd (:%xmm x) (:%xmm result))) 1126 ((:and (:not (:pred = 1127 (:apply %hardregspecvalue result) 1128 (:apply %hardregspecvalue x))) 1129 (:not (:pred = 1130 (:apply %hardregspecvalue result) 1131 (:apply %hardregspecvalue y)))) 1132 (movsd (:%xmm x) (:%xmm result)) 1133 (mulsd (:%xmm y) (:%xmm result)))) 1134 1135 ;;; Caller guarantees (not (eq y result)) 1136 (definex8632vinsn doublefloat/2 (((result :doublefloat)) 1137 ((x :doublefloat) 1138 (y :doublefloat))) 1139 ((:not (:pred = (:apply %hardregspecvalue result) 1140 (:apply %hardregspecvalue x))) 1141 (movsd (:%xmm x) (:%xmm result))) 1142 (divsd (:%xmm y) (:%xmm result))) 1143 1144 (definex8632vinsn singlefloat+2 (((result :singlefloat)) 1145 ((x :singlefloat) 1146 (y :singlefloat))) 1147 ((:pred = 1148 (:apply %hardregspecvalue result) 1149 (:apply %hardregspecvalue x)) 1150 (addss (:%xmm y) (:%xmm result))) 1151 ((:and (:not (:pred = 1152 (:apply %hardregspecvalue result) 1153 (:apply %hardregspecvalue x))) 1154 (:pred = 1155 (:apply %hardregspecvalue result) 1156 (:apply %hardregspecvalue y))) 1157 (addss (:%xmm x) (:%xmm result))) 1158 ((:and (:not (:pred = 1159 (:apply %hardregspecvalue result) 1160 (:apply %hardregspecvalue x))) 1161 (:not (:pred = 1162 (:apply %hardregspecvalue result) 1163 (:apply %hardregspecvalue y)))) 1164 (movss (:%xmm x) (:%xmm result)) 1165 (addss (:%xmm y) (:%xmm result)))) 1166 1167 ;;; Caller guarantees (not (eq y result)) 1168 (definex8632vinsn singlefloat2 (((result :singlefloat)) 1169 ((x :singlefloat) 1170 (y :singlefloat))) 1171 ((:not (:pred = (:apply %hardregspecvalue result) 1172 (:apply %hardregspecvalue x))) 1173 (movss (:%xmm x) (:%xmm result))) 1174 (subss (:%xmm y) (:%xmm result))) 1175 1176 (definex8632vinsn singlefloat*2 (((result :singlefloat)) 1177 ((x :singlefloat) 1178 (y :singlefloat))) 1179 ((:pred = 1180 (:apply %hardregspecvalue result) 1181 (:apply %hardregspecvalue x)) 1182 (mulss (:%xmm y) (:%xmm result))) 1183 ((:and (:not (:pred = 1184 (:apply %hardregspecvalue result) 1185 (:apply %hardregspecvalue x))) 1186 (:pred = 1187 (:apply %hardregspecvalue result) 1188 (:apply %hardregspecvalue y))) 1189 (mulss (:%xmm x) (:%xmm result))) 1190 ((:and (:not (:pred = 1191 (:apply %hardregspecvalue result) 1192 (:apply %hardregspecvalue x))) 1193 (:not (:pred = 1194 (:apply %hardregspecvalue result) 1195 (:apply %hardregspecvalue y)))) 1196 (movss (:%xmm x) (:%xmm result)) 1197 (mulss (:%xmm y) (:%xmm result)))) 1198 1199 ;;; Caller guarantees (not (eq y result)) 1200 (definex8632vinsn singlefloat/2 (((result :singlefloat)) 1201 ((x :singlefloat) 1202 (y :singlefloat))) 1203 ((:not (:pred = (:apply %hardregspecvalue result) 1204 (:apply %hardregspecvalue x))) 1205 (movss (:%xmm x) (:%xmm result))) 1206 (divss (:%xmm y) (:%xmm result))) 1207 1208 (definex8632vinsn getsingle (((result :singlefloat)) 1209 ((source :lisp))) 1210 (movss (:@ x8632::singlefloat.value (:%l source)) (:%xmm result))) 1211 1212 (definex8632vinsn getdouble (((result :doublefloat)) 1213 ((source :lisp))) 1214 (movsd (:@ x8632::doublefloat.value (:%l source)) (:%xmm result))) 1215 1216 ;;; Extract a doublefloat value, typechecking in the process. 1217 ;;; IWBNI we could simply call the "trapunlesstypecode=" vinsn here, 1218 ;;; instead of replicating it .. 1219 ;;; getdouble? 1220 1221 (definex8632vinsn copysinglefloat (((dest :singlefloat)) 1222 ((src :singlefloat))) 1223 (movss (:%xmm src) (:%xmm dest))) 1224 1225 (definex8632vinsn copysingletodouble (((dest :doublefloat)) 1226 ((src :singlefloat))) 1227 (cvtss2sd (:%xmm src) (:%xmm dest))) 1228 1229 (definex8632vinsn copydoubletosingle (((dest :singlefloat)) 1230 ((src :doublefloat))) 1231 (cvtsd2ss (:%xmm src) (:%xmm dest))) 1232 1233 (definex8632vinsn fitvals (() 1234 ((n :u16const)) 1235 ((imm :u16))) 1236 ((:pred = n 0) 1237 (xorl (:%l imm) (:%l imm))) 1238 ((:not (:pred = n 0)) 1239 (movw (:$w (:apply ash n x8632::fixnumshift)) (:%w imm))) 1240 (subw (:%w x8632::nargs) (:%w imm)) 1241 (jae :pushmore) 1242 (movswl (:%w imm) (:%l imm)) 1243 (subl (:%l imm) (:%l x8632::esp)) 1244 (jmp :done) 1245 :pushloop 1246 (pushl (:$l x8632::nilvalue)) 1247 (addw (:$b x8632::nodesize) (:%w x8632::nargs)) 1248 (subw (:$b x8632::nodesize) (:%w imm)) 1249 :pushmore 1250 (jne :pushloop) 1251 :done) 1252 1253 (definex8632vinsn (nvalret :jumpLR) (() 1254 ()) 1255 (jmp (:@ .SPnvalret))) 1256 1257 (definex8632vinsn lispwordref (((dest t)) 1258 ((base t) 1259 (offset t))) 1260 (movl (:@ (:%l base) (:%l offset)) (:%l dest))) 1261 1262 (definex8632vinsn lispwordrefc (((dest t)) 1263 ((base t) 1264 (offset :s32const))) 1265 ((:pred = offset 0) 1266 (movl (:@ (:%l base)) (:%l dest))) 1267 ((:not (:pred = offset 0)) 1268 (movl (:@ offset (:%l base)) (:%l dest)))) 1269 1270 ;; startmvcall 1271 1272 ;; ???? 1273 (definex8632vinsn emitalignedlabel (() 1274 ((label :label))) 1275 (:align 3) 1276 (:long (:^ label))) 1277 1278 ;; passmultiplevaluessymbol 1279 ;; passmultiplevalues 1280 1281 (definex8632vinsn reserveoutgoingframe (() 1282 ()) 1283 (pushl (:$b x8632::reservedframemarker)) 1284 (pushl (:$b x8632::reservedframemarker))) 1285 1286 ;; implicit temp0 arg 1287 (definex8632vinsn (callknownfunction :call) (() 1288 () 1289 ((entry (:label 1)))) 1290 (:talign 5) 1291 (call (:%l x8632::temp0)) 1292 (movl (:$self 0) (:%l x8632::fn))) 1293 1294 ;; jumpknownfunction 1295 ;; list 1296 ;; maketspcons 1297 ;; makefixedstackgvector 1298 1299 (definex8632vinsn discardtempframe (() 1300 () 1301 ((temp :imm))) 1302 (movl (:@ (:%seg :rcontext) x8632::tcr.savetsp) (:%l temp)) 1303 (movl (:@ (:%l temp)) (:%l temp)) 1304 (movl (:%l temp) (:@ (:%seg :rcontext) x8632::tcr.savetsp)) 1305 (movl (:%l temp) (:@ (:%seg :rcontext) x8632::tcr.nexttsp)) 1306 ) 1307 1308 (definex8632vinsn discardcframe (() 1309 () 1310 ((temp :imm))) 1311 (movl (:@ (:%seg :rcontext) x8632::tcr.foreignsp) (:%l temp)) 1312 (movl (:@ (:%l temp)) (:%l temp)) 1313 (movl (:%l temp) (:@ (:%seg :rcontext) x8632::tcr.foreignsp))) 1314 1315 1316 (definex8632vinsn vstackdiscard (() 1317 ((nwords :u32const))) 1318 ((:not (:pred = nwords 0)) 1319 ((:pred < nwords 16) 1320 (addl (:$b (:apply ash nwords x8632::wordshift)) (:%l x8632::esp))) 1321 ((:not (:pred < nwords 16)) 1322 (addl (:$l (:apply ash nwords x8632::wordshift)) (:%l x8632::esp))))) 1323 1324 (defmacro definex8632subprimcallvinsn ((name &rest otherattrs) spno) 1325 `(definex8632vinsn (,name :call :subprimcall ,@otherattrs) (() () ((entry (:label 1)))) 1326 (:talign 5) 1327 (call (:@ ,spno)) 1328 :back 1329 (movl (:$self 0) (:%l x8632::fn)))) 1330 1331 (defmacro definex8632subprimjumpvinsn ((name &rest otherattrs) spno) 1332 `(definex8632vinsn (,name :jump :jumpLR ,@otherattrs) (() ()) 1333 (jmp (:@ ,spno)))) 1334 1335 1336 1337 1338 1339 1340 1341 (definex8632subprimcallvinsn (subtagmiscref) .SPsubtagmiscref) 1342 1343 (definex8632subprimcallvinsn (subtagmiscset) .SPsubtagmiscset) 1344 1345 (definex8632vinsn memrefcabsoluteu8 (((dest :u8)) 1346 ((addr :s32const))) 1347 (movzbl (:@ addr) (:%l dest))) 1348 1349 (definex8632vinsn memrefcabsolutes8 (((dest :s8)) 1350 ((addr :s32const))) 1351 (movsbl (:@ addr) (:%l dest))) 1352 1353 (definex8632vinsn memrefcabsoluteu16 (((dest :u16)) 1354 ((addr :s32const))) 1355 (movzwl (:@ addr) (:%l dest))) 1356 1357 (definex8632vinsn memrefcabsolutes16 (((dest :s16)) 1358 ((addr :s32const))) 1359 (movswl (:@ addr) (:%l dest))) 1360 1361 (definex8632vinsn memrefcabsolutefullword (((dest :u32)) 1362 ((addr :s32const))) 1363 (movl (:@ addr) (:%l dest))) 1364 1365 (definex8632vinsn memrefcabsolutesignedfullword (((dest :s32)) 1366 ((addr :s32const))) 1367 (movl (:@ addr) (:%l dest))) 1368 1369 (definex8632vinsn memrefcabsolutenatural (((dest :u32)) 1370 ((addr :s32const))) 1371 (movl (:@ addr) (:%l dest))) 1372 1373 (definex8632vinsn eventpoll (() 1374 ()) 1375 (btrl (:$ub 31) (:@ (:%seg :rcontext) x8632::tcr.interruptpending)) 1376 (jae :nointerrupt) 1377 (ud2a) 1378 (:byte 2) 1379 :nointerrupt) 1380 1381 ;;; check2dbound 1382 ;;; check3dbound 1383 ;;; 2ddim1 1384 ;;; 3ddims 1385 ;;; 2dunscaledindex 1386 1387 ;;; 3dunscaledindex 1388 884 1389 (definex8632vinsn branchunlessbothargsfixnums (() 885 1390 ((a :lisp) 886 1391 (b :lisp) 887 1392 (dest :label)) 888 ((tag :u 16)))889 (mov w (:%w a) (:%wtag))890 (or w (:%w b) (:%wtag))891 (test w (:$w x8632::fixnummask) (:%wtag))1393 ((tag :u8))) 1394 (movl (:%l a) (:%l tag)) 1395 (orl (:%l b) (:%l tag)) 1396 (testl (:$l x8632::fixnummask) (:%l tag)) 892 1397 (jne dest)) 893 1398 … … 898 1403 (testb (:$b x8632::fixnummask) (:%b a))) 899 1404 ((:pred > (:apply %hardregspecvalue a) x8632::ebx) 900 (test w (:$w x8632::fixnummask) (:%wa)))1405 (testl (:$l x8632::fixnummask) (:%l a))) 901 1406 (jne dest)) 902 1407 … … 922 1427 (definex8632vinsn establishfn (() 923 1428 ()) 924 (movl (:self) (:%l x8632::fn))) 1429 (movl (:$self 0) (:%l x8632::fn))) 1430 1431 1432 (definex8632vinsn (callsubprim2 :call :subprimcall) (((dest t)) 1433 ((spno :s32const) 1434 (y t) 1435 (z t)) 1436 ((entry (:label 1)))) 1437 (:talign 5) 1438 (call (:@ spno)) 1439 (movl (:$self 0) (:%l x8632::fn))) 925 1440 926 1441 (queuefixup
Note: See TracChangeset
for help on using the changeset viewer.