1 #include "Jitter_CodeGenFactory.h" 2 3 #ifdef _WIN32 4 5 #ifdef _M_X64 6 #include "Jitter_CodeGen_x86_64.h" 7 #else 8 #include "Jitter_CodeGen_x86_32.h" 9 #endif 10 11 #elif defined(__APPLE__) 12 13 #include <TargetConditionals.h> 14 #if TARGET_CPU_ARM 15 #include "Jitter_CodeGen_AArch32.h" 16 #elif TARGET_CPU_ARM64 17 #include "Jitter_CodeGen_AArch64.h" 18 #elif TARGET_CPU_X86 19 #include "Jitter_CodeGen_x86_32.h" 20 #elif TARGET_CPU_X86_64 21 #include "Jitter_CodeGen_x86_64.h" 22 #else 23 #warning Architecture not supported 24 #endif 25 26 #elif defined(__ANDROID__) || defined(__linux__) || defined(__FreeBSD__) 27 28 #if defined(__arm__) 29 #include "Jitter_CodeGen_AArch32.h" 30 #elif defined(__aarch64__) 31 #include "Jitter_CodeGen_AArch64.h" 32 #elif defined(__i386__) 33 #include "Jitter_CodeGen_x86_32.h" 34 #elif defined(__x86_64__) 35 #include "Jitter_CodeGen_x86_64.h" 36 #else 37 #warning Architecture not supported 38 #endif 39 40 #endif 41 CreateCodeGen()42Jitter::CCodeGen* Jitter::CreateCodeGen() 43 { 44 #ifdef _WIN32 45 46 #ifdef _M_X64 47 auto codeGen = new Jitter::CCodeGen_x86_64(); 48 codeGen->SetPlatformAbi(CCodeGen_x86_64::PLATFORM_ABI_WIN32); 49 return codeGen; 50 #else 51 auto codeGen = new Jitter::CCodeGen_x86_32(); 52 codeGen->SetImplicitRetValueParamFixUpRequired(false); 53 return codeGen; 54 #endif 55 56 #elif defined(__APPLE__) 57 58 #if TARGET_CPU_ARM 59 auto codeGen = new Jitter::CCodeGen_AArch32(); 60 codeGen->SetPlatformAbi(CCodeGen_AArch32::PLATFORM_ABI_IOS); 61 return codeGen; 62 #elif TARGET_CPU_ARM64 63 return new Jitter::CCodeGen_AArch64(); 64 #elif TARGET_CPU_X86 65 auto codeGen = new Jitter::CCodeGen_x86_32(); 66 codeGen->SetImplicitRetValueParamFixUpRequired(true); 67 return codeGen; 68 #elif TARGET_CPU_X86_64 69 auto codeGen = new Jitter::CCodeGen_x86_64(); 70 codeGen->SetPlatformAbi(CCodeGen_x86_64::PLATFORM_ABI_SYSTEMV); 71 return codeGen; 72 #else 73 throw std::runtime_error("Unsupported architecture."); 74 #endif 75 76 #elif defined(__ANDROID__) || defined(__linux__) || defined(__FreeBSD__) 77 78 #if defined(__arm__) 79 #if defined(__ARM_EABI__) 80 auto codeGen = new Jitter::CCodeGen_AArch32(); 81 codeGen->SetPlatformAbi(CCodeGen_AArch32::PLATFORM_ABI_ARMEABI); 82 return codeGen; 83 #else 84 throw std::runtime_error("Unsupported AArch32 ABI."); 85 #endif 86 #elif defined(__aarch64__) 87 return new Jitter::CCodeGen_AArch64(); 88 #elif defined(__i386__) 89 auto codeGen = new Jitter::CCodeGen_x86_32(); 90 codeGen->SetImplicitRetValueParamFixUpRequired(true); 91 return codeGen; 92 #elif defined(__x86_64__) 93 auto codeGen = new Jitter::CCodeGen_x86_64(); 94 codeGen->SetPlatformAbi(CCodeGen_x86_64::PLATFORM_ABI_SYSTEMV); 95 return codeGen; 96 #else 97 throw std::runtime_error("Unsupported architecture."); 98 #endif 99 100 #else 101 102 throw std::runtime_error("Unsupported platform."); 103 104 #endif 105 } 106