summaryrefslogtreecommitdiffstats
path: root/src/codegen_sse.h
diff options
context:
space:
mode:
authorJukka Ojanen <jukka.ojanen@linkotec.net>2014-11-01 11:16:56 +0200
committerJukka Ojanen <jukka.ojanen@linkotec.net>2014-11-01 11:16:56 +0200
commitb4ec2061aab28f7cc626f36a3d8324eebeaab88a (patch)
treec8d7bd76bf34f0651d7b046fef23200dd22e0c9b /src/codegen_sse.h
parent8011f28cf0cb592251f5e95accbd8cf21e28f0c7 (diff)
downloadffts-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.h34
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;
OpenPOWER on IntegriCloud