Revision 5fafdf24 target-i386/ops_template_mem.h
b/target-i386/ops_template_mem.h | ||
---|---|---|
1 | 1 |
/* |
2 | 2 |
* i386 micro operations (included several times to generate |
3 | 3 |
* different operand sizes) |
4 |
*
|
|
4 |
* |
|
5 | 5 |
* Copyright (c) 2003 Fabrice Bellard |
6 | 6 |
* |
7 | 7 |
* This library is free software; you can redistribute it and/or |
... | ... | |
84 | 84 |
/* gcc 3.2 workaround. This is really a bug in gcc. */ |
85 | 85 |
asm volatile("" : : "r" (T0)); |
86 | 86 |
#endif |
87 |
CC_SRC = (cc_table[CC_OP].compute_all() & ~(CC_O | CC_C)) |
|
|
88 |
(lshift(src ^ T0, 11 - (DATA_BITS - 1)) & CC_O) |
|
|
87 |
CC_SRC = (cc_table[CC_OP].compute_all() & ~(CC_O | CC_C)) | |
|
88 |
(lshift(src ^ T0, 11 - (DATA_BITS - 1)) & CC_O) | |
|
89 | 89 |
(T0 & CC_C); |
90 | 90 |
CC_OP = CC_OP_EFLAGS; |
91 | 91 |
} |
... | ... | |
109 | 109 |
asm volatile("" : : "r" (T0)); |
110 | 110 |
#endif |
111 | 111 |
CC_SRC = (cc_table[CC_OP].compute_all() & ~(CC_O | CC_C)) | |
112 |
(lshift(src ^ T0, 11 - (DATA_BITS - 1)) & CC_O) |
|
|
112 |
(lshift(src ^ T0, 11 - (DATA_BITS - 1)) & CC_O) | |
|
113 | 113 |
((T0 >> (DATA_BITS - 1)) & CC_C); |
114 | 114 |
CC_OP = CC_OP_EFLAGS; |
115 | 115 |
} |
... | ... | |
168 | 168 |
glue(st, MEM_SUFFIX)(A0, T0); |
169 | 169 |
#endif |
170 | 170 |
CC_SRC = (eflags & ~(CC_C | CC_O)) | |
171 |
(lshift(src ^ T0, 11 - (DATA_BITS - 1)) & CC_O) |
|
|
171 |
(lshift(src ^ T0, 11 - (DATA_BITS - 1)) & CC_O) | |
|
172 | 172 |
((src >> (DATA_BITS - count)) & CC_C); |
173 | 173 |
CC_OP = CC_OP_EFLAGS; |
174 | 174 |
} |
... | ... | |
199 | 199 |
glue(st, MEM_SUFFIX)(A0, T0); |
200 | 200 |
#endif |
201 | 201 |
CC_SRC = (eflags & ~(CC_C | CC_O)) | |
202 |
(lshift(src ^ T0, 11 - (DATA_BITS - 1)) & CC_O) |
|
|
202 |
(lshift(src ^ T0, 11 - (DATA_BITS - 1)) & CC_O) | |
|
203 | 203 |
((src >> (count - 1)) & CC_C); |
204 | 204 |
CC_OP = CC_OP_EFLAGS; |
205 | 205 |
} |
Also available in: Unified diff