Update Changelog with new Xscale platforms and vmsvga.
[qemu] / target-arm / op_addsub.h
1 /*
2  * ARMv6 integer SIMD operations.
3  *
4  * Copyright (c) 2007 CodeSourcery.
5  * Written by Paul Brook
6  *
7  * This code is licenced under the GPL.
8  */
9
10 #ifdef ARITH_GE
11 #define DECLARE_GE uint32_t ge = 0
12 #define SET_GE env->GE = ge
13 #else
14 #define DECLARE_GE do{}while(0)
15 #define SET_GE do{}while(0)
16 #endif
17
18 #define RESULT(val, n, width) \
19     res |= ((uint32_t)(glue(glue(uint,width),_t))(val)) << (n * width)
20
21 void OPPROTO glue(glue(op_,PFX),add16_T0_T1)(void)
22 {
23     uint32_t res = 0;
24     DECLARE_GE;
25
26     ADD16(T0, T1, 0);
27     ADD16(T0 >> 16, T1 >> 16, 1);
28     SET_GE;
29     T0 = res;
30     FORCE_RET();
31 }
32
33 void OPPROTO glue(glue(op_,PFX),add8_T0_T1)(void)
34 {
35     uint32_t res = 0;
36     DECLARE_GE;
37
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);
42     SET_GE;
43     T0 = res;
44     FORCE_RET();
45 }
46
47 void OPPROTO glue(glue(op_,PFX),sub16_T0_T1)(void)
48 {
49     uint32_t res = 0;
50     DECLARE_GE;
51
52     SUB16(T0, T1, 0);
53     SUB16(T0 >> 16, T1 >> 16, 1);
54     SET_GE;
55     T0 = res;
56     FORCE_RET();
57 }
58
59 void OPPROTO glue(glue(op_,PFX),sub8_T0_T1)(void)
60 {
61     uint32_t res = 0;
62     DECLARE_GE;
63
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);
68     SET_GE;
69     T0 = res;
70     FORCE_RET();
71 }
72
73 void OPPROTO glue(glue(op_,PFX),subaddx_T0_T1)(void)
74 {
75     uint32_t res = 0;
76     DECLARE_GE;
77
78     ADD16(T0, T1, 0);
79     SUB16(T0 >> 16, T1 >> 16, 1);
80     SET_GE;
81     T0 = res;
82     FORCE_RET();
83 }
84
85 void OPPROTO glue(glue(op_,PFX),addsubx_T0_T1)(void)
86 {
87     uint32_t res = 0;
88     DECLARE_GE;
89
90     SUB16(T0, T1, 0);
91     ADD16(T0 >> 16, T1 >> 16, 1);
92     SET_GE;
93     T0 = res;
94     FORCE_RET();
95 }
96
97 #undef DECLARE_GE
98 #undef SET_GE
99 #undef RESULT
100
101 #undef ARITH_GE
102 #undef PFX
103 #undef ADD16
104 #undef SUB16
105 #undef ADD8
106 #undef SUB8