From 0ca65b9d4b687cdfb8c7f277a6b5258aab2859a2 Mon Sep 17 00:00:00 2001 From: Jonathan Campbell Date: Mon, 19 Feb 2018 20:44:42 -0800 Subject: [PATCH] Take one step for x86-64 dynamic core, at least to start it. Don't actually try to use it yet though. --- src/cpu/core_dyn_x86/risc_x86.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/cpu/core_dyn_x86/risc_x86.h b/src/cpu/core_dyn_x86/risc_x86.h index dea5ae0ca18..c3f662928bf 100644 --- a/src/cpu/core_dyn_x86/risc_x86.h +++ b/src/cpu/core_dyn_x86/risc_x86.h @@ -87,6 +87,9 @@ class GenReg { static BlockReturn gen_runcode(Bit8u * code) { BlockReturn retval; #if defined (_MSC_VER) +# if C_DYNAMIC_X86 == 64 // x86-64 64-bit +# error not implemented +# endif __asm { /* Prepare the flags */ mov eax,[code] @@ -112,6 +115,9 @@ static BlockReturn gen_runcode(Bit8u * code) { mov [retval],eax } #elif defined (MACOSX) +# if C_DYNAMIC_X86 == 64 // x86-64 64-bit +# error not implemented +# endif register Bit32u tempflags=reg_flags & FMASK_TEST; __asm__ volatile ( "pushl %%ebx \n" @@ -128,6 +134,22 @@ static BlockReturn gen_runcode(Bit8u * code) { ); reg_flags=(reg_flags & ~FMASK_TEST) | (tempflags & FMASK_TEST); #else +# if C_DYNAMIC_X86 == 64 // x86-64 64-bit + register Bit64u tempflags=reg_flags & FMASK_TEST; + + // WARNING: UNDER CONSTRUCTION! + + __asm__ volatile ( + "pushq $(run_return_adress) \n" + "pushq %2 \n" + "jmp *%3 \n" + "run_return_adress: \n" + :"=a" (retval), "=c" (tempflags) + :"r" (tempflags),"r" (code) + :"%rdx","%rbx","%rdi","%rsi","%rbp","%r8","cc","memory" + ); + reg_flags=(reg_flags & ~FMASK_TEST) | (tempflags & FMASK_TEST); +# else // x86 32-bit register Bit32u tempflags=reg_flags & FMASK_TEST; __asm__ volatile ( "pushl $(run_return_adress) \n" @@ -139,6 +161,7 @@ static BlockReturn gen_runcode(Bit8u * code) { :"%edx","%ebx","%edi","%esi","%ebp","cc","memory" ); reg_flags=(reg_flags & ~FMASK_TEST) | (tempflags & FMASK_TEST); +# endif #endif return retval; }