diff options
author | Alexis PUSKARCZYK | 2016-12-19 10:18:15 +0100 |
---|---|---|
committer | Alexis PUSKARCZYK | 2016-12-19 10:18:15 +0100 |
commit | ea4db4b5e14d27f9820cc72ecc7b244c1c2b9cb9 (patch) | |
tree | 1c711b85837e96914b692778376f7cf2dc51927f /libpcsxcore/new_dynarec/arm/assem_arm.h | |
parent | 127622a0091a7a54c8c32069bdd262ad6d402b16 (diff) | |
parent | 30373a821c80e223d5c592ccce95377ff57b4998 (diff) | |
download | pcsx_rearmed-ea4db4b5e14d27f9820cc72ecc7b244c1c2b9cb9.tar.gz pcsx_rearmed-ea4db4b5e14d27f9820cc72ecc7b244c1c2b9cb9.tar.bz2 pcsx_rearmed-ea4db4b5e14d27f9820cc72ecc7b244c1c2b9cb9.zip |
Merge branch 'master' of https://github.com/libretro/pcsx_rearmed into master_merged
Diffstat (limited to 'libpcsxcore/new_dynarec/arm/assem_arm.h')
-rw-r--r-- | libpcsxcore/new_dynarec/arm/assem_arm.h | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/libpcsxcore/new_dynarec/arm/assem_arm.h b/libpcsxcore/new_dynarec/arm/assem_arm.h new file mode 100644 index 0000000..bb6114c --- /dev/null +++ b/libpcsxcore/new_dynarec/arm/assem_arm.h @@ -0,0 +1,57 @@ +#define HOST_REGS 13 +#define HOST_CCREG 10 +#define HOST_BTREG 8 +#define EXCLUDE_REG 11 + +#define HOST_IMM8 1 +#define HAVE_CMOV_IMM 1 +#define HAVE_CONDITIONAL_CALL 1 +#define RAM_SIZE 0x200000 + +#define REG_SHIFT 2 + +/* ARM calling convention: + r0-r3, r12: caller-save + r4-r11: callee-save */ + +#define ARG1_REG 0 +#define ARG2_REG 1 +#define ARG3_REG 2 +#define ARG4_REG 3 + +/* GCC register naming convention: + r10 = sl (base) + r11 = fp (frame pointer) + r12 = ip (scratch) + r13 = sp (stack pointer) + r14 = lr (link register) + r15 = pc (program counter) */ + +#define FP 11 +#define LR 14 +#define HOST_TEMPREG 14 + +// Note: FP is set to &dynarec_local when executing generated code. +// Thus the local variables are actually global and not on the stack. + +extern char *invc_ptr; + +#define TARGET_SIZE_2 24 // 2^24 = 16 megabytes + +// Code generator target address +#if defined(BASE_ADDR_FIXED) + // "round" address helpful for debug + // this produces best code, but not many platforms allow it, + // only use if you are sure this range is always free + #define BASE_ADDR 0x1000000 + #define translation_cache (char *)BASE_ADDR +#elif defined(BASE_ADDR_DYNAMIC) + // for platforms that can't just use .bss buffer, like vita + // otherwise better to use the next option for closer branches + extern char *translation_cache; + #define BASE_ADDR (u_int)translation_cache +#else + // using a static buffer in .bss + extern char translation_cache[1 << TARGET_SIZE_2]; + #define BASE_ADDR (u_int)translation_cache +#endif |