mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-26 21:32:10 +00:00
[x86] Support i386-*-*-code16 triple for emitting 16-bit code
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199648 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1d9ab25560
commit
70ece0ada7
@ -120,6 +120,7 @@ public:
|
||||
GNUEABI,
|
||||
GNUEABIHF,
|
||||
GNUX32,
|
||||
CODE16,
|
||||
EABI,
|
||||
EABIHF,
|
||||
MachO,
|
||||
|
@ -149,6 +149,7 @@ const char *Triple::getEnvironmentTypeName(EnvironmentType Kind) {
|
||||
case GNUEABIHF: return "gnueabihf";
|
||||
case GNUEABI: return "gnueabi";
|
||||
case GNUX32: return "gnux32";
|
||||
case CODE16: return "code16";
|
||||
case EABI: return "eabi";
|
||||
case EABIHF: return "eabihf";
|
||||
case MachO: return "macho";
|
||||
@ -303,6 +304,7 @@ static Triple::EnvironmentType parseEnvironment(StringRef EnvironmentName) {
|
||||
.StartsWith("gnueabihf", Triple::GNUEABIHF)
|
||||
.StartsWith("gnueabi", Triple::GNUEABI)
|
||||
.StartsWith("gnux32", Triple::GNUX32)
|
||||
.StartsWith("code16", Triple::CODE16)
|
||||
.StartsWith("gnu", Triple::GNU)
|
||||
.StartsWith("macho", Triple::MachO)
|
||||
.StartsWith("android", Triple::Android)
|
||||
|
@ -48,8 +48,11 @@ std::string X86_MC::ParseX86Triple(StringRef TT) {
|
||||
std::string FS;
|
||||
if (TheTriple.getArch() == Triple::x86_64)
|
||||
FS = "+64bit-mode,-32bit-mode,-16bit-mode";
|
||||
else
|
||||
else if (TheTriple.getEnvironment() != Triple::CODE16)
|
||||
FS = "-64bit-mode,+32bit-mode,-16bit-mode";
|
||||
else
|
||||
FS = "-64bit-mode,-32bit-mode,+16bit-mode";
|
||||
|
||||
return FS;
|
||||
}
|
||||
|
||||
|
@ -558,8 +558,10 @@ X86Subtarget::X86Subtarget(const std::string &TT, const std::string &CPU,
|
||||
, TargetTriple(TT)
|
||||
, StackAlignOverride(StackAlignOverride)
|
||||
, In64BitMode(TargetTriple.getArch() == Triple::x86_64)
|
||||
, In32BitMode(TargetTriple.getArch() == Triple::x86)
|
||||
, In16BitMode(false) {
|
||||
, In32BitMode(TargetTriple.getArch() == Triple::x86 &&
|
||||
TargetTriple.getEnvironment() != Triple::CODE16)
|
||||
, In16BitMode(TargetTriple.getArch() == Triple::x86 &&
|
||||
TargetTriple.getEnvironment() == Triple::CODE16) {
|
||||
initializeEnvironment();
|
||||
resetSubtargetFeatures(CPU, FS);
|
||||
}
|
||||
|
@ -2,84 +2,113 @@
|
||||
// RUN: FileCheck --check-prefix=ERR64 < %t.err %s
|
||||
// RUN: not llvm-mc -triple i386-unknown-unknown --show-encoding %s 2> %t.err | FileCheck --check-prefix=32 %s
|
||||
// RUN: FileCheck --check-prefix=ERR32 < %t.err %s
|
||||
|
||||
// RUN: not llvm-mc -triple i386-unknown-unknown-code16 --show-encoding %s 2> %t.err | FileCheck --check-prefix=16 %s
|
||||
// RUN: FileCheck --check-prefix=ERR16 < %t.err %s
|
||||
|
||||
ret
|
||||
// 64: retq
|
||||
// 64: encoding: [0xc3]
|
||||
// 32: retl
|
||||
// 32: encoding: [0xc3]
|
||||
// 16: retw
|
||||
// 16: encoding: [0xc3]
|
||||
retw
|
||||
// 64: retw
|
||||
// 64: encoding: [0x66,0xc3]
|
||||
// 32: retw
|
||||
// 32: encoding: [0x66,0xc3]
|
||||
// 16: retw
|
||||
// 16: encoding: [0xc3]
|
||||
retl
|
||||
// ERR64: error: instruction requires: Not 64-bit mode
|
||||
// 32: retl
|
||||
// 32: encoding: [0xc3]
|
||||
// 16: retl
|
||||
// 16: encoding: [0x66,0xc3]
|
||||
retq
|
||||
// 64: retq
|
||||
// 64: encoding: [0xc3]
|
||||
// ERR32: error: instruction requires: 64-bit mode
|
||||
// ERR16: error: instruction requires: 64-bit mode
|
||||
|
||||
ret $0
|
||||
// 64: retq $0
|
||||
// 64: encoding: [0xc2,0x00,0x00]
|
||||
// 32: retl $0
|
||||
// 32: encoding: [0xc2,0x00,0x00]
|
||||
// 16: retw $0
|
||||
// 16: encoding: [0xc2,0x00,0x00]
|
||||
retw $0
|
||||
// 64: retw $0
|
||||
// 64: encoding: [0x66,0xc2,0x00,0x00]
|
||||
// 32: retw $0
|
||||
// 32: encoding: [0x66,0xc2,0x00,0x00]
|
||||
// 16: retw $0
|
||||
// 16: encoding: [0xc2,0x00,0x00]
|
||||
retl $0
|
||||
// ERR64: error: instruction requires: Not 64-bit mode
|
||||
// 32: retl $0
|
||||
// 32: encoding: [0xc2,0x00,0x00]
|
||||
// 16: retl $0
|
||||
// 16: encoding: [0x66,0xc2,0x00,0x00]
|
||||
retq $0
|
||||
// 64: retq $0
|
||||
// 64: encoding: [0xc2,0x00,0x00]
|
||||
// ERR32: error: instruction requires: 64-bit mode
|
||||
// ERR16: error: instruction requires: 64-bit mode
|
||||
|
||||
lret
|
||||
// 64: lretl
|
||||
// 64: encoding: [0xcb]
|
||||
// 32: lretl
|
||||
// 32: encoding: [0xcb]
|
||||
// 16: lretw
|
||||
// 16: encoding: [0xcb]
|
||||
lretw
|
||||
// 64: lretw
|
||||
// 64: encoding: [0x66,0xcb]
|
||||
// 32: lretw
|
||||
// 32: encoding: [0x66,0xcb]
|
||||
// 16: lretw
|
||||
// 16: encoding: [0xcb]
|
||||
lretl
|
||||
// 64: lretl
|
||||
// 64: encoding: [0xcb]
|
||||
// 32: lretl
|
||||
// 32: encoding: [0xcb]
|
||||
// 16: lretl
|
||||
// 16: encoding: [0x66,0xcb]
|
||||
lretq
|
||||
// 64: lretq
|
||||
// 64: encoding: [0x48,0xcb]
|
||||
// ERR32: error: instruction requires: 64-bit mode
|
||||
// ERR16: error: instruction requires: 64-bit mode
|
||||
|
||||
lret $0
|
||||
// 64: lretl $0
|
||||
// 64: encoding: [0xca,0x00,0x00]
|
||||
// 32: lretl $0
|
||||
// 32: encoding: [0xca,0x00,0x00]
|
||||
// 16: lretw $0
|
||||
// 16: encoding: [0xca,0x00,0x00]
|
||||
lretw $0
|
||||
// 64: lretw $0
|
||||
// 64: encoding: [0x66,0xca,0x00,0x00]
|
||||
// 32: lretw $0
|
||||
// 32: encoding: [0x66,0xca,0x00,0x00]
|
||||
// 16: lretw $0
|
||||
// 16: encoding: [0xca,0x00,0x00]
|
||||
lretl $0
|
||||
// 64: lretl $0
|
||||
// 64: encoding: [0xca,0x00,0x00]
|
||||
// 32: lretl $0
|
||||
// 32: encoding: [0xca,0x00,0x00]
|
||||
// 16: lretl $0
|
||||
// 16: encoding: [0x66,0xca,0x00,0x00]
|
||||
lretq $0
|
||||
// 64: lretq $0
|
||||
// 64: encoding: [0x48,0xca,0x00,0x00]
|
||||
// ERR32: error: instruction requires: 64-bit mode
|
||||
// ERR16: error: instruction requires: 64-bit mode
|
||||
|
||||
|
||||
|
@ -1,6 +1,4 @@
|
||||
// RUN: llvm-mc -triple i386-unknown-unknown --show-encoding %s | FileCheck %s
|
||||
|
||||
.code16
|
||||
// RUN: llvm-mc -triple i386-unknown-unknown-code16 --show-encoding %s | FileCheck %s
|
||||
|
||||
movl $0x12345678, %ebx
|
||||
// CHECK: movl
|
||||
|
Loading…
Reference in New Issue
Block a user