|
@@ -1378,6 +1378,8 @@ static preg *op_binop( jit_ctx *ctx, vreg *dst, vreg *a, vreg *b, hl_opcode *op
|
|
case OJSGt:
|
|
case OJSGt:
|
|
case OJEq:
|
|
case OJEq:
|
|
case OJNotEq:
|
|
case OJNotEq:
|
|
|
|
+ case OJNotLt:
|
|
|
|
+ case OJNotGte:
|
|
o = isf32 ? COMISS : COMISD;
|
|
o = isf32 ? COMISS : COMISD;
|
|
break;
|
|
break;
|
|
case OSMod:
|
|
case OSMod:
|
|
@@ -1568,6 +1570,7 @@ static preg *op_binop( jit_ctx *ctx, vreg *dst, vreg *a, vreg *b, hl_opcode *op
|
|
XJump_small(JNParity,jnotnan);
|
|
XJump_small(JNParity,jnotnan);
|
|
switch( op->op ) {
|
|
switch( op->op ) {
|
|
case OJSLt:
|
|
case OJSLt:
|
|
|
|
+ case OJNotLt:
|
|
{
|
|
{
|
|
preg *r = alloc_reg(ctx,RCPU);
|
|
preg *r = alloc_reg(ctx,RCPU);
|
|
// set CF=0, ZF=1
|
|
// set CF=0, ZF=1
|
|
@@ -1576,6 +1579,7 @@ static preg *op_binop( jit_ctx *ctx, vreg *dst, vreg *a, vreg *b, hl_opcode *op
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
case OJSGte:
|
|
case OJSGte:
|
|
|
|
+ case OJNotGte:
|
|
{
|
|
{
|
|
preg *r = alloc_reg(ctx,RCPU);
|
|
preg *r = alloc_reg(ctx,RCPU);
|
|
// set ZF=0, CF=1
|
|
// set ZF=0, CF=1
|
|
@@ -1642,6 +1646,12 @@ static int do_jump( jit_ctx *ctx, hl_op op, bool isFloat ) {
|
|
case OJNotEq:
|
|
case OJNotEq:
|
|
XJump(JNeq,j);
|
|
XJump(JNeq,j);
|
|
break;
|
|
break;
|
|
|
|
+ case OJNotLt:
|
|
|
|
+ XJump(JUGte,j);
|
|
|
|
+ break;
|
|
|
|
+ case OJNotGte:
|
|
|
|
+ XJump(JULt,j);
|
|
|
|
+ break;
|
|
default:
|
|
default:
|
|
j = 0;
|
|
j = 0;
|
|
printf("Unknown JUMP %d\n",op);
|
|
printf("Unknown JUMP %d\n",op);
|
|
@@ -2323,6 +2333,8 @@ int hl_jit_function( jit_ctx *ctx, hl_module *m, hl_function *f ) {
|
|
case OJSGt:
|
|
case OJSGt:
|
|
case OJULt:
|
|
case OJULt:
|
|
case OJUGte:
|
|
case OJUGte:
|
|
|
|
+ case OJNotLt:
|
|
|
|
+ case OJNotGte:
|
|
op_jump(ctx,dst,ra,o,(opCount + 1) + o->p3);
|
|
op_jump(ctx,dst,ra,o,(opCount + 1) + o->p3);
|
|
break;
|
|
break;
|
|
case OJAlways:
|
|
case OJAlways:
|
|
@@ -2710,7 +2722,7 @@ int hl_jit_function( jit_ctx *ctx, hl_module *m, hl_function *f ) {
|
|
}
|
|
}
|
|
op32(ctx,MOV,r,pconst(&p,dst->t->virt->fields[o->p2].hashed_name));
|
|
op32(ctx,MOV,r,pconst(&p,dst->t->virt->fields[o->p2].hashed_name));
|
|
op64(ctx,PUSH,r,UNUSED);
|
|
op64(ctx,PUSH,r,UNUSED);
|
|
- op64(ctx,PUSH,obj,UNUSED);
|
|
|
|
|
|
+ op64(ctx,PUSH,obj,UNUSED);
|
|
call_native(ctx,get_dynset(rb->t),size);
|
|
call_native(ctx,get_dynset(rb->t),size);
|
|
# endif
|
|
# endif
|
|
XJump_small(JAlways,jend);
|
|
XJump_small(JAlways,jend);
|