This commit is contained in:
Justin Ethier 2017-03-30 17:58:39 -04:00
parent f8bbff4ebb
commit ffb9fd9e22

View file

@ -134,9 +134,9 @@
(define-c bitwise-if (define-c bitwise-if
"(void* data, int argc, closure _, object k, "(void* data, int argc, closure _, object k,
object mask, object n0, object n1)" object mask, object n0, object n1)"
"Cyc_check_int(data, mask); "Cyc_check_fixnum(data, mask); // TODO: bignum support
Cyc_check_int(data, n0); Cyc_check_fixnum(data, n0);
Cyc_check_int(data, n1); Cyc_check_fixnum(data, n1);
int m = unbox_number(mask); int m = unbox_number(mask);
int result = (m & ((int)unbox_number(n0))) | ((~m) & ((int)unbox_number(n1))); int result = (m & ((int)unbox_number(n0))) | ((~m) & ((int)unbox_number(n1)));
return_closcall1(data, k, obj_int2obj(result));") return_closcall1(data, k, obj_int2obj(result));")
@ -209,16 +209,21 @@
Cyc_check_int(data,y); Cyc_check_int(data,y);
int bf = (int)unbox_number(x); int bf = (int)unbox_number(x);
int shift = (int)unbox_number(y); int shift = (int)unbox_number(y);
int i; //int i;
if (shift > 0) { if (shift > 0) {
for (i = 0; i < shift; i++) { bf <<= shift;
bf *= 2;
}
} else { } else {
for (i = 0; i < abs(shift); i++) { bf >>= abs(shift);
bf /= 2;
}
} }
// if (shift > 0) {
// for (i = 0; i < shift; i++) {
// bf *= 2;
// }
// } else {
// for (i = 0; i < abs(shift); i++) {
// bf /= 2;
// }
// }
return_closcall1(data, k, obj_int2obj(bf))") return_closcall1(data, k, obj_int2obj(bf))")
(define arithmetic-shift ash) (define arithmetic-shift ash)