1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
// 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.
#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
/*****************************************************************************/
|