2
0
Эх сурвалжийг харах

bugfix in ToInt conversion between different sizes

Nicolas Cannasse 8 жил өмнө
parent
commit
2052db2f82
1 өөрчлөгдсөн 9 нэмэгдсэн , 18 устгасан
  1. 9 18
      src/jit.c

+ 9 - 18
src/jit.c

@@ -958,22 +958,10 @@ static preg *copy( jit_ctx *ctx, preg *to, preg *from, int size ) {
 			op32(ctx,MOV8,to,from);
 			break;
 		case 2:
-			{
-				preg rtmp;
-				switch( ID2(to->kind,from->kind) ) {
-				case ID2(RCPU,RSTACK):
-					op32(ctx,MOV,to,from);
-					op32(ctx,AND,to,pconst(&rtmp,0xFFFF));
-					break;
-				case ID2(RSTACK,RCPU):
-					op32(ctx,MOV16,to,from);
-					break;
-				default:
-					ASSERT(size);
-					break;
-				}
-				break;
-			}
+			if( to->kind == RCPU )
+				op64(ctx,XOR,to,to);
+			op32(ctx,MOV16,to,from);
+			break;
 		case 4:
 			op32(ctx,MOV,to,from);
 			break;
@@ -2404,8 +2392,11 @@ int hl_jit_function( jit_ctx *ctx, hl_module *m, hl_function *f ) {
 				store(ctx, dst, w, true);
 			} else if (ra->t->kind == HF32) {
 				ASSERT(0);
-			} else
-				op_mov(ctx, dst, ra);
+			} else {
+				preg *r = alloc_cpu(ctx,dst,false);
+				copy(ctx, r, fetch(ra), ra->size);
+				store(ctx, dst, r, true);
+			}
 			break;
 		case ORet:
 			op_ret(ctx, dst);