shithub: riscv

Download patch

ref: e6d64bab9dc7c71c80e82b7c41555a413f502399
parent: 107ca1b42d099d74cd033be7f363b92d4ff29e3c
author: cinap_lenrek <[email protected]>
date: Sun Oct 4 16:06:59 EDT 2015

8c: handle 64 bit mixedmode asop and type vlong <-> float/double type conversions

--- a/sys/src/cmd/8c/machcap.c
+++ b/sys/src/cmd/8c/machcap.c
@@ -18,7 +18,7 @@
 		if(typev[n->type->etype]) {
 //		if(typev[n->type->etype] && n->right->op == OCONST) {
 //			if(hi64v(n->right) == 0)
-				return 1;
+				return !mixedasop(n->left->type, n->right->type);
 		}
 		break;
 
@@ -58,6 +58,8 @@
 
 	case OASADD:
 	case OASSUB:
+		return !mixedasop(n->left->type, n->right->type);
+
 	case OASAND:
 	case OASOR:
 	case OASXOR:
--- a/sys/src/cmd/8c/txt.c
+++ b/sys/src/cmd/8c/txt.c
@@ -621,20 +621,18 @@
 		a = AMOVWLZX;
 		goto ld;
 	case TINT:
-	case TUINT:
 	case TLONG:
-	case TULONG:
-	case TIND:
 		if(typefd[tt]) {
 			gins(AFMOVL, f, &fregnode0);
 			gmove(&fregnode0, t);
 			return;
 		}
+	case TUINT:
+	case TULONG:
+	case TIND:
 		a = AMOVL;
-
 	ld:
 		regalloc(&nod, f, t);
-		nod.type = types[TLONG];
 		gins(a, f, &nod);
 		gmove(&nod, t);
 		regfree(&nod);