aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Preud'homme <robotux@celest.fr>2013-06-14 16:18:16 +0200
committerjiang <30155751@qq.com>2014-04-29 16:01:57 +0800
commit02e2fe3c260415f4cb1cbcaca9b2403a17f7ff2e (patch)
tree33ffbf1c4d5ed21ea8e33a743e6f8cda0136288f
parentd0c4138ac2abd83096cc5b882aa02939c9bfa91a (diff)
downloadtinycc-02e2fe3c260415f4cb1cbcaca9b2403a17f7ff2e.tar.gz
tinycc-02e2fe3c260415f4cb1cbcaca9b2403a17f7ff2e.tar.bz2
Add support for load/store of _Bool value
Add support for loading _Bool value in i386, x86_64 and arm as well as support for storing _Bool value on arm.
-rw-r--r--arm-gen.c4
-rw-r--r--i386-gen.c2
-rw-r--r--x86_64-gen.c2
3 files changed, 4 insertions, 4 deletions
diff --git a/arm-gen.c b/arm-gen.c
index 250b1d9..eccfdd8 100644
--- a/arm-gen.c
+++ b/arm-gen.c
@@ -571,7 +571,7 @@ void load(int r, SValue *sv)
op=0xE5100000;
if(!sign)
op|=0x800000;
- if ((ft & VT_BTYPE) == VT_BYTE)
+ if ((ft & VT_BTYPE) == VT_BYTE || (ft & VT_BTYPE) == VT_BOOL)
op|=0x400000;
o(op|(intr(r)<<12)|fc|(base<<16));
}
@@ -699,7 +699,7 @@ void store(int r, SValue *sv)
op=0xE5000000;
if(!sign)
op|=0x800000;
- if ((ft & VT_BTYPE) == VT_BYTE)
+ if ((ft & VT_BTYPE) == VT_BYTE || (ft & VT_BTYPE) == VT_BOOL)
op|=0x400000;
o(op|(intr(r)<<12)|fc|(base<<16));
}
diff --git a/i386-gen.c b/i386-gen.c
index 2a4007c..844a482 100644
--- a/i386-gen.c
+++ b/i386-gen.c
@@ -244,7 +244,7 @@ ST_FUNC void load(int r, SValue *sv)
} else if ((ft & VT_BTYPE) == VT_LDOUBLE) {
o(0xdb); /* fldt */
r = 5;
- } else if ((ft & VT_TYPE) == VT_BYTE) {
+ } else if ((ft & VT_TYPE) == VT_BYTE || (ft & VT_TYPE) == VT_BOOL) {
o(0xbe0f); /* movsbl */
} else if ((ft & VT_TYPE) == (VT_BYTE | VT_UNSIGNED)) {
o(0xb60f); /* movzbl */
diff --git a/x86_64-gen.c b/x86_64-gen.c
index 2788677..d1bf75c 100644
--- a/x86_64-gen.c
+++ b/x86_64-gen.c
@@ -414,7 +414,7 @@ void load(int r, SValue *sv)
r = REG_VALUE(r);
} else if ((ft & VT_BTYPE) == VT_LDOUBLE) {
b = 0xdb, r = 5; /* fldt */
- } else if ((ft & VT_TYPE) == VT_BYTE) {
+ } else if ((ft & VT_TYPE) == VT_BYTE || (ft & VT_TYPE) == VT_BOOL) {
b = 0xbe0f; /* movsbl */
} else if ((ft & VT_TYPE) == (VT_BYTE | VT_UNSIGNED)) {
b = 0xb60f; /* movzbl */