ref: dbb8b774527a030a3b83b8a422234755fc928ed3
parent: 89ce7731fc48c5e3d374ef3082da7958a0e4bc49
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Thu Mar 31 09:57:49 EDT 2022
cc2/qbe: Add support for sign in float casts Float casts were missing the unsigned version of the operators.
--- a/src/cmd/cc/cc2/target/qbe/arch.h
+++ b/src/cmd/cc/cc2/target/qbe/arch.h
@@ -100,14 +100,22 @@
ASUEXTWL,
ASSTOL,
+ ASSTOUL,
ASSTOW,
+ ASSTOUW,
ASDTOL,
+ ASDTOUL,
ASDTOW,
+ ASDTOUW,
ASSWTOD,
+ ASUWTOD,
ASSWTOS,
+ ASUWTOS,
ASSLTOD,
+ ASULTOD,
ASSLTOS,
+ ASULTOS,
ASEXTS,
ASTRUNCD,
--- a/src/cmd/cc/cc2/target/qbe/cgen.c
+++ b/src/cmd/cc/cc2/target/qbe/cgen.c
@@ -258,7 +258,11 @@
default:
abort();
}
- /* TODO: Add signess */
+ /*
+ * unsigned version of operations are always +1 the
+ * signed version
+ */
+ op += (td->flags & SIGNF) == 0;
} else if (s_isint) {
/* conversion from int to float */
switch (ts->size) {
@@ -275,7 +279,11 @@
default:
abort();
}
- /* TODO: Add signess */
+ /*
+ * unsigned version of operations are always +1 the
+ * signed version
+ */
+ op += (ts->flags & SIGNF) == 0;
} else {
/* conversion from float to float */
op = (td->size == 4) ? ASEXTS : ASTRUNCD;
--- a/src/cmd/cc/cc2/target/qbe/code.c
+++ b/src/cmd/cc/cc2/target/qbe/code.c
@@ -125,14 +125,22 @@
[ASUEXTWL]= {.fun = unary, .txt = "extuw", .letter = 'l'},
[ASSTOL] = {.fun = unary, .txt = "stosi", .letter = 'l'},
+ [ASSTOUL] = {.fun = unary, .txt = "stoui", .letter = 'l'},
[ASSTOW] = {.fun = unary, .txt = "stosi", .letter = 'w'},
+ [ASSTOUW] = {.fun = unary, .txt = "stoui", .letter = 'w'},
[ASDTOL] = {.fun = unary, .txt = "dtosi", .letter = 'l'},
+ [ASDTOUL] = {.fun = unary, .txt = "dtoui", .letter = 'l'},
[ASDTOW] = {.fun = unary, .txt = "dtosi", .letter = 'w'},
+ [ASDTOUW] = {.fun = unary, .txt = "dtoui", .letter = 'w'},
[ASSWTOD] = {.fun = unary, .txt = "swtof", .letter = 'd'},
+ [ASUWTOD] = {.fun = unary, .txt = "uwtof", .letter = 'd'},
[ASSWTOS] = {.fun = unary, .txt = "swtof", .letter = 's'},
+ [ASUWTOS] = {.fun = unary, .txt = "uwtof", .letter = 's'},
[ASSLTOD] = {.fun = unary, .txt = "sltof", .letter = 'd'},
+ [ASULTOD] = {.fun = unary, .txt = "ultof", .letter = 'd'},
[ASSLTOS] = {.fun = unary, .txt = "sltof", .letter = 's'},
+ [ASULTOS] = {.fun = unary, .txt = "ultof", .letter = 's'},
[ASEXTS] = {.fun = unary, .txt = "exts", .letter = 'd'},
[ASTRUNCD] = {.fun = unary, .txt = "truncd", .letter = 's'},