Loading target-alpha/helper.h +1 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ DEF_HELPER_FLAGS_1(cttz, TCG_CALL_NO_RWG_SE, i64, i64) DEF_HELPER_FLAGS_2(zap, TCG_CALL_NO_RWG_SE, i64, i64, i64) DEF_HELPER_FLAGS_2(zapnot, TCG_CALL_NO_RWG_SE, i64, i64, i64) DEF_HELPER_FLAGS_1(cmpbe0, TCG_CALL_NO_RWG_SE, i64, i64) DEF_HELPER_FLAGS_2(cmpbge, TCG_CALL_NO_RWG_SE, i64, i64, i64) DEF_HELPER_FLAGS_2(minub8, TCG_CALL_NO_RWG_SE, i64, i64, i64) Loading target-alpha/int_helper.c +14 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,20 @@ uint64_t helper_zap(uint64_t val, uint64_t mask) return helper_zapnot(val, ~mask); } uint64_t helper_cmpbe0(uint64_t a) { uint64_t m = 0x7f7f7f7f7f7f7f7fULL; uint64_t c = ~(((a & m) + m) | a | m); /* a.......b.......c.......d.......e.......f.......g.......h....... */ c |= c << 7; /* ab......bc......cd......de......ef......fg......gh......h....... */ c |= c << 14; /* abcd....bcde....cdef....defg....efgh....fgh.....gh......h....... */ c |= c << 28; /* abcdefghbcdefgh.cdefgh..defgh...efgh....fgh.....gh......h....... */ return c >> 56; } uint64_t helper_cmpbge(uint64_t a, uint64_t b) { uint64_t mask = 0x00ff00ff00ff00ffULL; Loading target-alpha/translate.c +6 −1 Original line number Diff line number Diff line Loading @@ -1507,7 +1507,12 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn) break; case 0x0F: /* CMPBGE */ if (ra == 31) { /* Special case 0 >= X as X == 0. */ gen_helper_cmpbe0(vc, vb); } else { gen_helper_cmpbge(vc, va, vb); } break; case 0x12: /* S8ADDL */ Loading Loading
target-alpha/helper.h +1 −0 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ DEF_HELPER_FLAGS_1(cttz, TCG_CALL_NO_RWG_SE, i64, i64) DEF_HELPER_FLAGS_2(zap, TCG_CALL_NO_RWG_SE, i64, i64, i64) DEF_HELPER_FLAGS_2(zapnot, TCG_CALL_NO_RWG_SE, i64, i64, i64) DEF_HELPER_FLAGS_1(cmpbe0, TCG_CALL_NO_RWG_SE, i64, i64) DEF_HELPER_FLAGS_2(cmpbge, TCG_CALL_NO_RWG_SE, i64, i64, i64) DEF_HELPER_FLAGS_2(minub8, TCG_CALL_NO_RWG_SE, i64, i64, i64) Loading
target-alpha/int_helper.c +14 −0 Original line number Diff line number Diff line Loading @@ -58,6 +58,20 @@ uint64_t helper_zap(uint64_t val, uint64_t mask) return helper_zapnot(val, ~mask); } uint64_t helper_cmpbe0(uint64_t a) { uint64_t m = 0x7f7f7f7f7f7f7f7fULL; uint64_t c = ~(((a & m) + m) | a | m); /* a.......b.......c.......d.......e.......f.......g.......h....... */ c |= c << 7; /* ab......bc......cd......de......ef......fg......gh......h....... */ c |= c << 14; /* abcd....bcde....cdef....defg....efgh....fgh.....gh......h....... */ c |= c << 28; /* abcdefghbcdefgh.cdefgh..defgh...efgh....fgh.....gh......h....... */ return c >> 56; } uint64_t helper_cmpbge(uint64_t a, uint64_t b) { uint64_t mask = 0x00ff00ff00ff00ffULL; Loading
target-alpha/translate.c +6 −1 Original line number Diff line number Diff line Loading @@ -1507,7 +1507,12 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn) break; case 0x0F: /* CMPBGE */ if (ra == 31) { /* Special case 0 >= X as X == 0. */ gen_helper_cmpbe0(vc, vb); } else { gen_helper_cmpbge(vc, va, vb); } break; case 0x12: /* S8ADDL */ Loading