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

This commit is contained in:
cinap_lenrek 2015-10-04 20:06:59 +02:00
parent 107ca1b42d
commit e6d64bab9d
2 changed files with 6 additions and 6 deletions

View file

@ -18,7 +18,7 @@ machcap(Node *n)
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 @@ machcap(Node *n)
case OASADD:
case OASSUB:
return !mixedasop(n->left->type, n->right->type);
case OASAND:
case OASOR:
case OASXOR:

View file

@ -621,20 +621,18 @@ gmove(Node *f, Node *t)
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);