diff options
| author | Thomas Preud'homme <robotux@celest.fr> | 2013-06-14 16:18:16 +0200 |
|---|---|---|
| committer | jiang <30155751@qq.com> | 2014-04-29 16:01:57 +0800 |
| commit | 02e2fe3c260415f4cb1cbcaca9b2403a17f7ff2e (patch) | |
| tree | 33ffbf1c4d5ed21ea8e33a743e6f8cda0136288f | |
| parent | d0c4138ac2abd83096cc5b882aa02939c9bfa91a (diff) | |
| download | tinycc-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.c | 4 | ||||
| -rw-r--r-- | i386-gen.c | 2 | ||||
| -rw-r--r-- | x86_64-gen.c | 2 |
3 files changed, 4 insertions, 4 deletions
@@ -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)); } @@ -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 */ |
