summaryrefslogtreecommitdiff
path: root/src/jit/emitjmps.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/jit/emitjmps.h')
-rw-r--r--src/jit/emitjmps.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/jit/emitjmps.h b/src/jit/emitjmps.h
new file mode 100644
index 0000000000..60815d13ea
--- /dev/null
+++ b/src/jit/emitjmps.h
@@ -0,0 +1,58 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for more information.
+
+// clang-format off
+#ifndef JMP_SMALL
+#error Must define JMP_SMALL macro before including this file
+#endif
+
+#if defined(_TARGET_XARCH_)
+
+// jump reverse instruction
+JMP_SMALL(jmp , jmp , jmp )
+JMP_SMALL(jo , jno , jo )
+JMP_SMALL(jno , jo , jno )
+JMP_SMALL(jb , jae , jb )
+JMP_SMALL(jae , jb , jae )
+JMP_SMALL(je , jne , je )
+JMP_SMALL(jne , je , jne )
+JMP_SMALL(jbe , ja , jbe )
+JMP_SMALL(ja , jbe , ja )
+JMP_SMALL(js , jns , js )
+JMP_SMALL(jns , js , jns )
+JMP_SMALL(jpe , jpo , jpe )
+JMP_SMALL(jpo , jpe , jpo )
+JMP_SMALL(jl , jge , jl )
+JMP_SMALL(jge , jl , jge )
+JMP_SMALL(jle , jg , jle )
+JMP_SMALL(jg , jle , jg )
+
+#elif defined(_TARGET_ARMARCH_)
+
+// jump reverse instruction condcode
+JMP_SMALL(jmp , jmp , b ) // AL always
+JMP_SMALL(eq , ne , beq ) // EQ
+JMP_SMALL(ne , eq , bne ) // NE
+JMP_SMALL(hs , lo , bhs ) // HS also CS
+JMP_SMALL(lo , hs , blo ) // LO also CC
+JMP_SMALL(mi , pl , bmi ) // MI
+JMP_SMALL(pl , mi , bpl ) // PL
+JMP_SMALL(vs , vc , bvs ) // VS
+JMP_SMALL(vc , vs , bvc ) // VC
+JMP_SMALL(hi , ls , bhi ) // HI
+JMP_SMALL(ls , hi , bls ) // LS
+JMP_SMALL(ge , lt , bge ) // GE
+JMP_SMALL(lt , ge , blt ) // LT
+JMP_SMALL(gt , le , bgt ) // GT
+JMP_SMALL(le , gt , ble ) // LE
+
+#else
+ #error Unsupported or unset target architecture
+#endif // target type
+
+/*****************************************************************************/
+#undef JMP_SMALL
+/*****************************************************************************/
+
+// clang-format on