summaryrefslogtreecommitdiff
path: root/x86
diff options
context:
space:
mode:
authorDavid Guillen Fandos2021-05-07 20:41:54 +0200
committerDavid Guillen Fandos2021-05-07 20:41:54 +0200
commit37430f22c5234cb09f2325575806b830f947bf8a (patch)
tree715e87726e9c9e6c7aec3d7d1e7faf259f6874eb /x86
parent7877a8888b4e607c3df77c5d5f47e2c880cb9a24 (diff)
downloadpicogpsp-37430f22c5234cb09f2325575806b830f947bf8a.tar.gz
picogpsp-37430f22c5234cb09f2325575806b830f947bf8a.tar.bz2
picogpsp-37430f22c5234cb09f2325575806b830f947bf8a.zip
Small optimization (~2-4%) and whitespace cleanup!
Cleans up a ton of whitespace in cpu.c (like 100KB!) and improves readability of some massive decode statements. Added an optimization for PC-relative loads (pool load) in ROM (since it's read only and cannot possibily change) that directly emits an immediate load. This is way faster, specially in MIPS/x86, ARM can be even faster if we rewrite the immediate load macros to also use a pool.
Diffstat (limited to 'x86')
-rw-r--r--x86/x86_emit.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/x86/x86_emit.h b/x86/x86_emit.h
index 45b663b..69c1f8e 100644
--- a/x86/x86_emit.h
+++ b/x86/x86_emit.h
@@ -325,7 +325,7 @@ typedef enum
x86_emit_mov_reg_mem(reg_##ireg, reg_base, reg_index * 4); \
#define generate_load_pc(ireg, new_pc) \
- x86_emit_mov_reg_imm(reg_##ireg, new_pc) \
+ x86_emit_mov_reg_imm(reg_##ireg, (new_pc)) \
#define generate_load_imm(ireg, imm) \
x86_emit_mov_reg_imm(reg_##ireg, imm) \
@@ -1894,6 +1894,10 @@ u32 function_cc execute_ror_imm_op(u32 value, u32 shift)
// Operation types: imm, mem_reg, mem_imm
+#define thumb_load_pc_pool_const(reg_rd, value) \
+ generate_load_pc(a0, (value)); \
+ generate_store_reg(a0, reg_rd)
+
#define thumb_access_memory_load(mem_type, reg_rd) \
cycle_count += 2; \
generate_function_call(execute_load_##mem_type); \