Revision 6ddbc6e4 target-arm/op_addsub.h

b/target-arm/op_addsub.h
8 8
 */
9 9

  
10 10
#ifdef ARITH_GE
11
#define GE_ARG , uint32_t *gep
11 12
#define DECLARE_GE uint32_t ge = 0
12
#define SET_GE env->GE = ge
13
#define SET_GE *gep = ge
13 14
#else
15
#define GE_ARG
14 16
#define DECLARE_GE do{}while(0)
15 17
#define SET_GE do{}while(0)
16 18
#endif
......
18 20
#define RESULT(val, n, width) \
19 21
    res |= ((uint32_t)(glue(glue(uint,width),_t))(val)) << (n * width)
20 22

  
21
void OPPROTO glue(glue(op_,PFX),add16_T0_T1)(void)
23
uint32_t HELPER(glue(PFX,add16))(uint32_t a, uint32_t b GE_ARG)
22 24
{
23 25
    uint32_t res = 0;
24 26
    DECLARE_GE;
25 27

  
26
    ADD16(T0, T1, 0);
27
    ADD16(T0 >> 16, T1 >> 16, 1);
28
    ADD16(a, b, 0);
29
    ADD16(a >> 16, b >> 16, 1);
28 30
    SET_GE;
29
    T0 = res;
30
    FORCE_RET();
31
    return res;
31 32
}
32 33

  
33
void OPPROTO glue(glue(op_,PFX),add8_T0_T1)(void)
34
uint32_t HELPER(glue(PFX,add8))(uint32_t a, uint32_t b GE_ARG)
34 35
{
35 36
    uint32_t res = 0;
36 37
    DECLARE_GE;
37 38

  
38
    ADD8(T0, T1, 0);
39
    ADD8(T0 >> 8, T1 >> 8, 1);
40
    ADD8(T0 >> 16, T1 >> 16, 2);
41
    ADD8(T0 >> 24, T1 >> 24, 3);
39
    ADD8(a, b, 0);
40
    ADD8(a >> 8, b >> 8, 1);
41
    ADD8(a >> 16, b >> 16, 2);
42
    ADD8(a >> 24, b >> 24, 3);
42 43
    SET_GE;
43
    T0 = res;
44
    FORCE_RET();
44
    return res;
45 45
}
46 46

  
47
void OPPROTO glue(glue(op_,PFX),sub16_T0_T1)(void)
47
uint32_t HELPER(glue(PFX,sub16))(uint32_t a, uint32_t b GE_ARG)
48 48
{
49 49
    uint32_t res = 0;
50 50
    DECLARE_GE;
51 51

  
52
    SUB16(T0, T1, 0);
53
    SUB16(T0 >> 16, T1 >> 16, 1);
52
    SUB16(a, b, 0);
53
    SUB16(a >> 16, b >> 16, 1);
54 54
    SET_GE;
55
    T0 = res;
56
    FORCE_RET();
55
    return res;
57 56
}
58 57

  
59
void OPPROTO glue(glue(op_,PFX),sub8_T0_T1)(void)
58
uint32_t HELPER(glue(PFX,sub8))(uint32_t a, uint32_t b GE_ARG)
60 59
{
61 60
    uint32_t res = 0;
62 61
    DECLARE_GE;
63 62

  
64
    SUB8(T0, T1, 0);
65
    SUB8(T0 >> 8, T1 >> 8, 1);
66
    SUB8(T0 >> 16, T1 >> 16, 2);
67
    SUB8(T0 >> 24, T1 >> 24, 3);
63
    SUB8(a, b, 0);
64
    SUB8(a >> 8, b >> 8, 1);
65
    SUB8(a >> 16, b >> 16, 2);
66
    SUB8(a >> 24, b >> 24, 3);
68 67
    SET_GE;
69
    T0 = res;
70
    FORCE_RET();
68
    return res;
71 69
}
72 70

  
73
void OPPROTO glue(glue(op_,PFX),subaddx_T0_T1)(void)
71
uint32_t HELPER(glue(PFX,subaddx))(uint32_t a, uint32_t b GE_ARG)
74 72
{
75 73
    uint32_t res = 0;
76 74
    DECLARE_GE;
77 75

  
78
    ADD16(T0, T1, 0);
79
    SUB16(T0 >> 16, T1 >> 16, 1);
76
    ADD16(a, b, 0);
77
    SUB16(a >> 16, b >> 16, 1);
80 78
    SET_GE;
81
    T0 = res;
82
    FORCE_RET();
79
    return res;
83 80
}
84 81

  
85
void OPPROTO glue(glue(op_,PFX),addsubx_T0_T1)(void)
82
uint32_t HELPER(glue(PFX,addsubx))(uint32_t a, uint32_t b GE_ARG)
86 83
{
87 84
    uint32_t res = 0;
88 85
    DECLARE_GE;
89 86

  
90
    SUB16(T0, T1, 0);
91
    ADD16(T0 >> 16, T1 >> 16, 1);
87
    SUB16(a, b, 0);
88
    ADD16(a >> 16, b >> 16, 1);
92 89
    SET_GE;
93
    T0 = res;
94
    FORCE_RET();
90
    return res;
95 91
}
96 92

  
93
#undef GE_ARG
97 94
#undef DECLARE_GE
98 95
#undef SET_GE
99 96
#undef RESULT

Also available in: Unified diff