Revision 14ce26e7 target-i386/ops_template_mem.h

b/target-i386/ops_template_mem.h
28 28
#define MEM_SUFFIX w_raw
29 29
#elif DATA_BITS == 32
30 30
#define MEM_SUFFIX l_raw
31
#elif DATA_BITS == 64
32
#define MEM_SUFFIX q_raw
31 33
#endif
32 34

  
33 35
#elif MEM_WRITE == 1
......
38 40
#define MEM_SUFFIX w_kernel
39 41
#elif DATA_BITS == 32
40 42
#define MEM_SUFFIX l_kernel
43
#elif DATA_BITS == 64
44
#define MEM_SUFFIX q_kernel
41 45
#endif
42 46

  
43 47
#elif MEM_WRITE == 2
......
48 52
#define MEM_SUFFIX w_user
49 53
#elif DATA_BITS == 32
50 54
#define MEM_SUFFIX l_user
55
#elif DATA_BITS == 64
56
#define MEM_SUFFIX q_user
51 57
#endif
52 58

  
53 59
#else
......
64 70

  
65 71
void OPPROTO glue(glue(op_rol, MEM_SUFFIX), _T0_T1_cc)(void)
66 72
{
67
    int count, src;
73
    int count;
74
    target_long src;
75

  
68 76
    count = T1 & SHIFT_MASK;
69 77
    if (count) {
70 78
        src = T0;
71 79
        T0 &= DATA_MASK;
72 80
        T0 = (T0 << count) | (T0 >> (DATA_BITS - count));
73 81
#ifdef MEM_WRITE
74
        glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
82
        glue(st, MEM_SUFFIX)(A0, T0);
75 83
#else
76 84
        /* gcc 3.2 workaround. This is really a bug in gcc. */
77 85
        asm volatile("" : : "r" (T0));
......
86 94

  
87 95
void OPPROTO glue(glue(op_ror, MEM_SUFFIX), _T0_T1_cc)(void)
88 96
{
89
    int count, src;
97
    int count;
98
    target_long src;
99

  
90 100
    count = T1 & SHIFT_MASK;
91 101
    if (count) {
92 102
        src = T0;
93 103
        T0 &= DATA_MASK;
94 104
        T0 = (T0 >> count) | (T0 << (DATA_BITS - count));
95 105
#ifdef MEM_WRITE
96
        glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
106
        glue(st, MEM_SUFFIX)(A0, T0);
97 107
#else
98 108
        /* gcc 3.2 workaround. This is really a bug in gcc. */
99 109
        asm volatile("" : : "r" (T0));
......
114 124
        T0 &= DATA_MASK;
115 125
        T0 = (T0 << count) | (T0 >> (DATA_BITS - count));
116 126
#ifdef MEM_WRITE
117
        glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
127
        glue(st, MEM_SUFFIX)(A0, T0);
118 128
#endif
119 129
    }
120 130
    FORCE_RET();
......
128 138
        T0 &= DATA_MASK;
129 139
        T0 = (T0 >> count) | (T0 << (DATA_BITS - count));
130 140
#ifdef MEM_WRITE
131
        glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
141
        glue(st, MEM_SUFFIX)(A0, T0);
132 142
#endif
133 143
    }
134 144
    FORCE_RET();
......
136 146

  
137 147
void OPPROTO glue(glue(op_rcl, MEM_SUFFIX), _T0_T1_cc)(void)
138 148
{
139
    int count, res, eflags;
140
    unsigned int src;
149
    int count, eflags;
150
    target_ulong src;
151
    target_long res;
141 152

  
142
    count = T1 & 0x1f;
153
    count = T1 & SHIFT1_MASK;
143 154
#if DATA_BITS == 16
144 155
    count = rclw_table[count];
145 156
#elif DATA_BITS == 8
......
154 165
            res |= T0 >> (DATA_BITS + 1 - count);
155 166
        T0 = res;
156 167
#ifdef MEM_WRITE
157
        glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
168
        glue(st, MEM_SUFFIX)(A0, T0);
158 169
#endif
159 170
        CC_SRC = (eflags & ~(CC_C | CC_O)) |
160 171
            (lshift(src ^ T0, 11 - (DATA_BITS - 1)) & CC_O) | 
......
166 177

  
167 178
void OPPROTO glue(glue(op_rcr, MEM_SUFFIX), _T0_T1_cc)(void)
168 179
{
169
    int count, res, eflags;
170
    unsigned int src;
180
    int count, eflags;
181
    target_ulong src;
182
    target_long res;
171 183

  
172
    count = T1 & 0x1f;
184
    count = T1 & SHIFT1_MASK;
173 185
#if DATA_BITS == 16
174 186
    count = rclw_table[count];
175 187
#elif DATA_BITS == 8
......
184 196
            res |= T0 << (DATA_BITS + 1 - count);
185 197
        T0 = res;
186 198
#ifdef MEM_WRITE
187
        glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
199
        glue(st, MEM_SUFFIX)(A0, T0);
188 200
#endif
189 201
        CC_SRC = (eflags & ~(CC_C | CC_O)) |
190 202
            (lshift(src ^ T0, 11 - (DATA_BITS - 1)) & CC_O) | 
......
196 208

  
197 209
void OPPROTO glue(glue(op_shl, MEM_SUFFIX), _T0_T1_cc)(void)
198 210
{
199
    int count, src;
200
    count = T1 & 0x1f;
211
    int count;
212
    target_long src;
213

  
214
    count = T1 & SHIFT1_MASK;
201 215
    if (count) {
202 216
        src = (DATA_TYPE)T0 << (count - 1);
203 217
        T0 = T0 << count;
204 218
#ifdef MEM_WRITE
205
        glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
219
        glue(st, MEM_SUFFIX)(A0, T0);
206 220
#endif
207 221
        CC_SRC = src;
208 222
        CC_DST = T0;
......
213 227

  
214 228
void OPPROTO glue(glue(op_shr, MEM_SUFFIX), _T0_T1_cc)(void)
215 229
{
216
    int count, src;
217
    count = T1 & 0x1f;
230
    int count;
231
    target_long src;
232

  
233
    count = T1 & SHIFT1_MASK;
218 234
    if (count) {
219 235
        T0 &= DATA_MASK;
220 236
        src = T0 >> (count - 1);
221 237
        T0 = T0 >> count;
222 238
#ifdef MEM_WRITE
223
        glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
239
        glue(st, MEM_SUFFIX)(A0, T0);
224 240
#endif
225 241
        CC_SRC = src;
226 242
        CC_DST = T0;
......
231 247

  
232 248
void OPPROTO glue(glue(op_sar, MEM_SUFFIX), _T0_T1_cc)(void)
233 249
{
234
    int count, src;
235
    count = T1 & 0x1f;
250
    int count;
251
    target_long src;
252

  
253
    count = T1 & SHIFT1_MASK;
236 254
    if (count) {
237 255
        src = (DATA_STYPE)T0;
238 256
        T0 = src >> count;
239 257
        src = src >> (count - 1);
240 258
#ifdef MEM_WRITE
241
        glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
259
        glue(st, MEM_SUFFIX)(A0, T0);
242 260
#endif
243 261
        CC_SRC = src;
244 262
        CC_DST = T0;
......
262 280
        res |= T1 << (count - 16);
263 281
    T0 = res >> 16;
264 282
#ifdef MEM_WRITE
265
    glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
283
    glue(st, MEM_SUFFIX)(A0, T0);
266 284
#endif
267 285
    CC_SRC = tmp;
268 286
    CC_DST = T0;
......
282 300
          res |= T1 << (count - 16);
283 301
        T0 = res >> 16;
284 302
#ifdef MEM_WRITE
285
        glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
303
        glue(st, MEM_SUFFIX)(A0, T0);
286 304
#endif
287 305
        CC_SRC = tmp;
288 306
        CC_DST = T0;
......
304 322
        res |= T1 << (32 - count);
305 323
    T0 = res;
306 324
#ifdef MEM_WRITE
307
    glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
325
    glue(st, MEM_SUFFIX)(A0, T0);
308 326
#endif
309 327
    CC_SRC = tmp;
310 328
    CC_DST = T0;
......
325 343
            res |= T1 << (32 - count);
326 344
        T0 = res;
327 345
#ifdef MEM_WRITE
328
        glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
346
        glue(st, MEM_SUFFIX)(A0, T0);
329 347
#endif
330 348
        CC_SRC = tmp;
331 349
        CC_DST = T0;
......
335 353
}
336 354
#endif
337 355

  
338
#if DATA_BITS == 32
356
#if DATA_BITS >= 32
339 357
void OPPROTO glue(glue(op_shld, MEM_SUFFIX), _T0_T1_im_cc)(void)
340 358
{
341
    int count, tmp;
359
    int count;
360
    target_long tmp;
361

  
342 362
    count = PARAM1;
343 363
    T0 &= DATA_MASK;
344 364
    T1 &= DATA_MASK;
345 365
    tmp = T0 << (count - 1);
346 366
    T0 = (T0 << count) | (T1 >> (DATA_BITS - count));
347 367
#ifdef MEM_WRITE
348
    glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
368
    glue(st, MEM_SUFFIX)(A0, T0);
349 369
#endif
350 370
    CC_SRC = tmp;
351 371
    CC_DST = T0;
......
353 373

  
354 374
void OPPROTO glue(glue(op_shld, MEM_SUFFIX), _T0_T1_ECX_cc)(void)
355 375
{
356
    int count, tmp;
357
    count = ECX & 0x1f;
376
    int count;
377
    target_long tmp;
378

  
379
    count = ECX & SHIFT1_MASK;
358 380
    if (count) {
359 381
        T0 &= DATA_MASK;
360 382
        T1 &= DATA_MASK;
361 383
        tmp = T0 << (count - 1);
362 384
        T0 = (T0 << count) | (T1 >> (DATA_BITS - count));
363 385
#ifdef MEM_WRITE
364
        glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
386
        glue(st, MEM_SUFFIX)(A0, T0);
365 387
#endif
366 388
        CC_SRC = tmp;
367 389
        CC_DST = T0;
......
372 394

  
373 395
void OPPROTO glue(glue(op_shrd, MEM_SUFFIX), _T0_T1_im_cc)(void)
374 396
{
375
    int count, tmp;
397
    int count;
398
    target_long tmp;
399

  
376 400
    count = PARAM1;
377 401
    T0 &= DATA_MASK;
378 402
    T1 &= DATA_MASK;
379 403
    tmp = T0 >> (count - 1);
380 404
    T0 = (T0 >> count) | (T1 << (DATA_BITS - count));
381 405
#ifdef MEM_WRITE
382
    glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
406
    glue(st, MEM_SUFFIX)(A0, T0);
383 407
#endif
384 408
    CC_SRC = tmp;
385 409
    CC_DST = T0;
......
388 412

  
389 413
void OPPROTO glue(glue(op_shrd, MEM_SUFFIX), _T0_T1_ECX_cc)(void)
390 414
{
391
    int count, tmp;
392
    count = ECX & 0x1f;
415
    int count;
416
    target_long tmp;
417

  
418
    count = ECX & SHIFT1_MASK;
393 419
    if (count) {
394 420
        T0 &= DATA_MASK;
395 421
        T1 &= DATA_MASK;
396 422
        tmp = T0 >> (count - 1);
397 423
        T0 = (T0 >> count) | (T1 << (DATA_BITS - count));
398 424
#ifdef MEM_WRITE
399
        glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
425
        glue(st, MEM_SUFFIX)(A0, T0);
400 426
#endif
401 427
        CC_SRC = tmp;
402 428
        CC_DST = T0;
......
414 440
    cf = cc_table[CC_OP].compute_c();
415 441
    T0 = T0 + T1 + cf;
416 442
#ifdef MEM_WRITE
417
    glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
443
    glue(st, MEM_SUFFIX)(A0, T0);
418 444
#endif
419 445
    CC_SRC = T1;
420 446
    CC_DST = T0;
421
    CC_OP = CC_OP_ADDB + SHIFT + cf * 3;
447
    CC_OP = CC_OP_ADDB + SHIFT + cf * 4;
422 448
}
423 449

  
424 450
void OPPROTO glue(glue(op_sbb, MEM_SUFFIX), _T0_T1_cc)(void)
......
427 453
    cf = cc_table[CC_OP].compute_c();
428 454
    T0 = T0 - T1 - cf;
429 455
#ifdef MEM_WRITE
430
    glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
456
    glue(st, MEM_SUFFIX)(A0, T0);
431 457
#endif
432 458
    CC_SRC = T1;
433 459
    CC_DST = T0;
434
    CC_OP = CC_OP_SUBB + SHIFT + cf * 3;
460
    CC_OP = CC_OP_SUBB + SHIFT + cf * 4;
435 461
}
436 462

  
437 463
void OPPROTO glue(glue(op_cmpxchg, MEM_SUFFIX), _T0_T1_EAX_cc)(void)
438 464
{
439
    unsigned int src, dst;
465
    target_ulong src, dst;
440 466

  
441 467
    src = T0;
442 468
    dst = EAX - T0;
443 469
    if ((DATA_TYPE)dst == 0) {
444 470
        T0 = T1;
445 471
#ifdef MEM_WRITE
446
        glue(st, MEM_SUFFIX)((uint8_t *)A0, T0);
472
        glue(st, MEM_SUFFIX)(A0, T0);
447 473
#endif
448 474
    } else {
449 475
        EAX = (EAX & ~DATA_MASK) | (T0 & DATA_MASK);

Also available in: Unified diff