diff options
author | Jukka Ojanen <jukka.ojanen@linkotec.net> | 2014-11-01 11:16:56 +0200 |
---|---|---|
committer | Jukka Ojanen <jukka.ojanen@linkotec.net> | 2014-11-01 11:16:56 +0200 |
commit | b4ec2061aab28f7cc626f36a3d8324eebeaab88a (patch) | |
tree | c8d7bd76bf34f0651d7b046fef23200dd22e0c9b /src/codegen_sse.h | |
parent | 8011f28cf0cb592251f5e95accbd8cf21e28f0c7 (diff) | |
download | ffts-b4ec2061aab28f7cc626f36a3d8324eebeaab88a.zip ffts-b4ec2061aab28f7cc626f36a3d8324eebeaab88a.tar.gz |
XMM6:XMM15 Nonvolatile, must be preserved as needed by callee. http://msdn.microsoft.com/en-us/library/9z1stfyw(v=vs.80).aspx
Diffstat (limited to 'src/codegen_sse.h')
-rw-r--r-- | src/codegen_sse.h | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/src/codegen_sse.h b/src/codegen_sse.h index a63d21d..269d142 100644 --- a/src/codegen_sse.h +++ b/src/codegen_sse.h @@ -31,7 +31,6 @@ */ - #ifndef FFTS_CODEGEN_SSE_H #define FFTS_CODEGEN_SSE_H @@ -63,19 +62,21 @@ extern const uint32_t sse_leaf_oe_offsets[8]; #define ECX 1 #define EDX 2 #define EBX 3 +#define ESP 4 +#define EBP 5 #define ESI 6 #define EDI 7 -#define EBP 5 #define RAX 0 #define RCX 1 #define RDX 2 #define RBX 3 +#define RSP 4 +#define RBP 5 #define RSI 6 #define RDI 7 -#define RBP 5 -#define R8 8 -#define R9 9 +#define R8 8 +#define R9 9 #define R10 10 #define R11 11 #define R12 12 @@ -185,6 +186,29 @@ void ADDI(uint8_t **p, uint8_t dst, int32_t imm) } } +void SUBI(uint8_t **p, uint8_t dst, int32_t imm) +{ + if (dst >= 8) { + *(*p)++ = 0x49; + } else { + *(*p)++ = 0x48; + } + + if (imm > 127 || imm <= -128) { + *(*p)++ = 0x81; + } else { + *(*p)++ = 0x83; + } + + *(*p)++ = 0xe8 | (dst & 0x7); + + if (imm > 127 || imm <= -128) { + IMM32(p, imm); + } else { + IMM8(p, imm); + } +} + void CALL(uint8_t **p, uint8_t *func) { *(*p)++ = 0xe8; |