Add support for loading _Bool value in i386, x86_64 and arm as well as support for storing _Bool value on arm.
Unified · Split
| @@ -571,7 +571,7 @@ void load(int r, SValue *sv) · 570 unmodified lines | |||
| 571 | op=0xE5100000; | 571 | op=0xE5100000; |
| 572 | if(!sign) | 572 | if(!sign) |
| 573 | op|=0x800000; | 573 | op|=0x800000; |
| 574 | if ((ft & VT_BTYPE) == VT_BYTE) | 574 | if ((ft & VT_BTYPE) == VT_BYTE || (ft & VT_BTYPE) == VT_BOOL) |
| 575 | op|=0x400000; | 575 | op|=0x400000; |
| 576 | o(op|(intr(r)<<12)|fc|(base<<16)); | 576 | o(op|(intr(r)<<12)|fc|(base<<16)); |
| 577 | } | 577 | } |
| @@ -699,7 +699,7 @@ void store(int r, SValue *sv) · 121 unmodified lines | |||
| 699 | op=0xE5000000; | 699 | op=0xE5000000; |
| 700 | if(!sign) | 700 | if(!sign) |
| 701 | op|=0x800000; | 701 | op|=0x800000; |
| 702 | if ((ft & VT_BTYPE) == VT_BYTE) | 702 | if ((ft & VT_BTYPE) == VT_BYTE || (ft & VT_BTYPE) == VT_BOOL) |
| 703 | op|=0x400000; | 703 | op|=0x400000; |
| 704 | o(op|(intr(r)<<12)|fc|(base<<16)); | 704 | o(op|(intr(r)<<12)|fc|(base<<16)); |
| 705 | } | 705 | } |
| @@ -244,7 +244,7 @@ ST_FUNC void load(int r, SValue *sv) · 243 unmodified lines | |||
| 244 | } else if ((ft & VT_BTYPE) == VT_LDOUBLE) { | 244 | } else if ((ft & VT_BTYPE) == VT_LDOUBLE) { |
| 245 | o(0xdb); /* fldt */ | 245 | o(0xdb); /* fldt */ |
| 246 | r = 5; | 246 | r = 5; |
| 247 | } else if ((ft & VT_TYPE) == VT_BYTE) { | 247 | } else if ((ft & VT_TYPE) == VT_BYTE || (ft & VT_TYPE) == VT_BOOL) { |
| 248 | o(0xbe0f); /* movsbl */ | 248 | o(0xbe0f); /* movsbl */ |
| 249 | } else if ((ft & VT_TYPE) == (VT_BYTE | VT_UNSIGNED)) { | 249 | } else if ((ft & VT_TYPE) == (VT_BYTE | VT_UNSIGNED)) { |
| 250 | o(0xb60f); /* movzbl */ | 250 | o(0xb60f); /* movzbl */ |
| @@ -414,7 +414,7 @@ void load(int r, SValue *sv) · 413 unmodified lines | |||
| 414 | r = REG_VALUE(r); | 414 | r = REG_VALUE(r); |
| 415 | } else if ((ft & VT_BTYPE) == VT_LDOUBLE) { | 415 | } else if ((ft & VT_BTYPE) == VT_LDOUBLE) { |
| 416 | b = 0xdb, r = 5; /* fldt */ | 416 | b = 0xdb, r = 5; /* fldt */ |
| 417 | } else if ((ft & VT_TYPE) == VT_BYTE) { | 417 | } else if ((ft & VT_TYPE) == VT_BYTE || (ft & VT_TYPE) == VT_BOOL) { |
| 418 | b = 0xbe0f; /* movsbl */ | 418 | b = 0xbe0f; /* movsbl */ |
| 419 | } else if ((ft & VT_TYPE) == (VT_BYTE | VT_UNSIGNED)) { | 419 | } else if ((ft & VT_TYPE) == (VT_BYTE | VT_UNSIGNED)) { |
| 420 | b = 0xb60f; /* movzbl */ | 420 | b = 0xb60f; /* movzbl */ |