JIT:
- merge OP_BL in thumb mode; winport: - update SVN tools;
This commit is contained in:
parent
45658d4543
commit
4d95474f92
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (C) 2006 yopyop
|
||||
Copyright (C) 2011 Loren Merritt
|
||||
Copyright (C) 2012 DeSmuME team
|
||||
Copyright (C) 2012-2013 DeSmuME team
|
||||
|
||||
This file is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -3868,11 +3868,16 @@ static u32 instr_attributes(u32 opcode)
|
|||
static bool instr_is_branch(u32 opcode)
|
||||
{
|
||||
u32 x = instr_attributes(opcode);
|
||||
|
||||
if(bb_thumb)
|
||||
{
|
||||
// merge OP_BL_10+OP_BL_11
|
||||
if (x & MERGE_NEXT) return false;
|
||||
return (x & BRANCH_ALWAYS)
|
||||
|| ((x & BRANCH_POS0) && ((opcode&7) | ((opcode>>4)&8)) == 15)
|
||||
|| (x & BRANCH_SWI)
|
||||
|| (x & JIT_BYPASS);
|
||||
}
|
||||
else
|
||||
return (x & BRANCH_ALWAYS)
|
||||
|| ((x & BRANCH_POS12) && REG_POS(opcode,12) == 15)
|
||||
|
@ -4111,7 +4116,7 @@ static u32 compile_basicblock()
|
|||
|
||||
u32 cycles = instr_cycles(opcode);
|
||||
|
||||
bEndBlock = (i >= (CommonSettings.jit_max_block_size - 1)) || instr_is_branch(opcode);
|
||||
bEndBlock = instr_is_branch(opcode) || (i >= (CommonSettings.jit_max_block_size - 1));
|
||||
|
||||
#if LOG_JIT
|
||||
if (instr_is_conditional(opcode) && (cycles > 1) || (cycles == 0))
|
||||
|
@ -4236,7 +4241,7 @@ template<int PROCNUM> u32 arm_jit_compile()
|
|||
template u32 arm_jit_compile<0>();
|
||||
template u32 arm_jit_compile<1>();
|
||||
|
||||
void arm_jit_reset(bool enable)
|
||||
void arm_jit_reset(bool enable, bool suppress_msg)
|
||||
{
|
||||
#if LOG_JIT
|
||||
c.setLogger(&logger);
|
||||
|
@ -4247,7 +4252,8 @@ void arm_jit_reset(bool enable)
|
|||
#ifdef HAVE_STATIC_CODE_BUFFER
|
||||
scratchptr = scratchpad;
|
||||
#endif
|
||||
printf("CPU mode: %s\n", enable?"JIT":"Interpreter");
|
||||
if (!suppress_msg)
|
||||
printf("CPU mode: %s\n", enable?"JIT":"Interpreter");
|
||||
saveBlockSizeJIT = CommonSettings.jit_max_block_size;
|
||||
|
||||
if (enable)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (C) 2006 yopyop
|
||||
Copyright (C) 2011 Loren Merritt
|
||||
Copyright (C) 2012 DeSmuME team
|
||||
Copyright (C) 2012-2013 DeSmuME team
|
||||
|
||||
This file is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -26,7 +26,7 @@
|
|||
|
||||
typedef u32 (FASTCALL* ArmOpCompiled)();
|
||||
|
||||
void arm_jit_reset(bool enable);
|
||||
void arm_jit_reset(bool enable, bool suppress_msg = false);
|
||||
void arm_jit_close();
|
||||
void arm_jit_sync();
|
||||
template<int PROCNUM> u32 arm_jit_compile();
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
/* Copyright (C) 2006 yopyop
|
||||
Copyright (C) 2011 Loren Merritt
|
||||
Copyright (C) 2012 DeSmuME team
|
||||
Copyright (C) 2012-2013 DeSmuME team
|
||||
|
||||
This file is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -41,6 +41,8 @@
|
|||
#define BRANCH_LDM 0x00004000
|
||||
#define BRANCH_SWI 0x00008000 // branch if use external SWI - if (cpu->swi_tab == NULL)
|
||||
|
||||
#define MERGE_NEXT 0x04000000
|
||||
|
||||
#define JIT_BYPASS 0x80000000 // JIT makes no assumptions about what this instruction does
|
||||
|
||||
static const u32 instruction_attributes[4096] = {
|
||||
|
@ -5103,38 +5105,38 @@ INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX
|
|||
INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX
|
||||
INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX
|
||||
INSTR_CYCLES(3) | BRANCH_ALWAYS, //OP_BLX
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER , //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(1) | BRANCH_NEVER | MERGE_NEXT, //OP_BL_10
|
||||
INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11
|
||||
INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11
|
||||
INSTR_CYCLES(4) | BRANCH_ALWAYS, //OP_BL_11
|
||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -3,7 +3,7 @@
|
|||
licensed under the terms supplied at the end of this file (for the terms are very long!)
|
||||
Differences from that baseline version are:
|
||||
|
||||
Copyright (C) 2009-2011 DeSmuME team
|
||||
Copyright (C) 2009-2013 DeSmuME team
|
||||
|
||||
This file is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -97,9 +97,6 @@ void HK_ReloadROM(int, bool justPressed)
|
|||
#ifdef HAVE_JIT
|
||||
void HK_CpuMode(int, bool justPressed)
|
||||
{
|
||||
extern void arm_jit_sync();
|
||||
void arm_jit_reset(bool enable);
|
||||
|
||||
arm_jit_sync();
|
||||
CommonSettings.use_jit = !CommonSettings.use_jit;
|
||||
arm_jit_reset(CommonSettings.use_jit);
|
||||
|
@ -119,7 +116,7 @@ void HK_JitBlockSizeDec(int, bool justPressed)
|
|||
char tmp[256];
|
||||
sprintf(tmp,"JIT block size changed to: %d", CommonSettings.jit_max_block_size);
|
||||
osd->addLine(tmp);
|
||||
arm_jit_reset(CommonSettings.use_jit);
|
||||
arm_jit_reset(CommonSettings.use_jit, true);
|
||||
}
|
||||
|
||||
void HK_JitBlockSizeInc(int, bool justPressed)
|
||||
|
@ -131,7 +128,7 @@ void HK_JitBlockSizeInc(int, bool justPressed)
|
|||
char tmp[256];
|
||||
sprintf(tmp,"JIT block size changed to: %d", CommonSettings.jit_max_block_size);
|
||||
osd->addLine(tmp);
|
||||
arm_jit_reset(CommonSettings.use_jit);
|
||||
arm_jit_reset(CommonSettings.use_jit, true);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in New Issue