Revision af7bf89b target-sparc/op.c

b/target-sparc/op.c
217 217

  
218 218
#define EIP (env->pc)
219 219

  
220
#define FLAG_SET(x) (env->psr&x)?1:0
220
#define FLAG_SET(x) ((env->psr&x)?1:0)
221 221
#define FFLAG_SET(x) ((env->fsr&x)?1:0)
222 222

  
223 223
void OPPROTO op_movl_T0_0(void)
......
225 225
    T0 = 0;
226 226
}
227 227

  
228
void OPPROTO op_movl_T0_1(void)
229
{
230
    T0 = 1;
231
}
232

  
233 228
void OPPROTO op_movl_T0_im(void)
234 229
{
235 230
    T0 = PARAM1;
......
245 240
    T2 = PARAM1;
246 241
}
247 242

  
248
void OPPROTO op_addl_T1_im(void)
243
void OPPROTO op_add_T1_T0(void)
249 244
{
250
    T1 += PARAM1;
245
    T0 += T1;
251 246
}
252 247

  
253
void OPPROTO op_addl_T1_T2(void)
248
void OPPROTO op_add_T1_T0_cc(void)
254 249
{
255
    T1 += T2;
256
}
250
    target_ulong src1;
257 251

  
258
void OPPROTO op_subl_T1_T2(void)
259
{
260
    T1 -= T2;
252
    src1 = T0;
253
    T0 += T1;
254
    env->psr = 0;
255
    if (!T0)
256
	env->psr |= PSR_ZERO;
257
    if ((int32_t) T0 < 0)
258
	env->psr |= PSR_NEG;
259
    if (T0 < src1)
260
	env->psr |= PSR_CARRY;
261
    if (((src1 ^ T1 ^ -1) & (src1 ^ T0)) & (1 << 31))
262
	env->psr |= PSR_OVF;
263
    /* V9 xcc */
264
    FORCE_RET();
261 265
}
262 266

  
263
void OPPROTO op_add_T1_T0(void)
267
void OPPROTO op_addx_T1_T0(void)
264 268
{
265
    T0 += T1;
269
    T0 += T1 + FLAG_SET(PSR_CARRY);
266 270
}
267 271

  
268
void OPPROTO op_add_T1_T0_cc(void)
272
void OPPROTO op_addx_T1_T0_cc(void)
269 273
{
270
    unsigned int src1;
274
    target_ulong src1;
275

  
271 276
    src1 = T0;
272
    T0 += T1;
277
    T0 += T1 + FLAG_SET(PSR_CARRY);
273 278
    env->psr = 0;
274 279
    if (!T0)
275 280
	env->psr |= PSR_ZERO;
276
    if ((int) T0 < 0)
281
    if ((int32_t) T0 < 0)
277 282
	env->psr |= PSR_NEG;
278 283
    if (T0 < src1)
279 284
	env->psr |= PSR_CARRY;
280 285
    if (((src1 ^ T1 ^ -1) & (src1 ^ T0)) & (1 << 31))
281 286
	env->psr |= PSR_OVF;
287
    /* V9 xcc */
282 288
    FORCE_RET();
283 289
}
284 290

  
......
289 295

  
290 296
void OPPROTO op_sub_T1_T0_cc(void)
291 297
{
292
    unsigned int src1;
298
    target_ulong src1;
293 299

  
294 300
    src1 = T0;
295 301
    T0 -= T1;
296 302
    env->psr = 0;
297 303
    if (!T0)
298 304
	env->psr |= PSR_ZERO;
299
    if ((int) T0 < 0)
305
    if ((int32_t) T0 < 0)
300 306
	env->psr |= PSR_NEG;
301 307
    if (src1 < T1)
302 308
	env->psr |= PSR_CARRY;
303 309
    if (((src1 ^ T1) & (src1 ^ T0)) & (1 << 31))
304 310
	env->psr |= PSR_OVF;
311
    /* V9 xcc */
312
    FORCE_RET();
313
}
314

  
315
void OPPROTO op_subx_T1_T0(void)
316
{
317
    T0 -= T1 + FLAG_SET(PSR_CARRY);
318
}
319

  
320
void OPPROTO op_subx_T1_T0_cc(void)
321
{
322
    target_ulong src1;
323

  
324
    src1 = T0;
325
    T0 -= T1 + FLAG_SET(PSR_CARRY);
326
    env->psr = 0;
327
    if (!T0)
328
	env->psr |= PSR_ZERO;
329
    if ((int32_t) T0 < 0)
330
	env->psr |= PSR_NEG;
331
    if (src1 < T1)
332
	env->psr |= PSR_CARRY;
333
    if (((src1 ^ T1) & (src1 ^ T0)) & (1 << 31))
334
	env->psr |= PSR_OVF;
335
    /* V9 xcc */
305 336
    FORCE_RET();
306 337
}
307 338

  
......
335 366
    T0 ^= ~T1;
336 367
}
337 368

  
338
void OPPROTO op_addx_T1_T0(void)
339
{
340
    T0 += T1 + ((env->psr & PSR_CARRY) ? 1 : 0);
341
}
342

  
343 369
void OPPROTO op_umul_T1_T0(void)
344 370
{
345 371
    uint64_t res;
346
    res = (uint64_t) T0 *(uint64_t) T1;
372
    res = (uint64_t) T0 * (uint64_t) T1;
347 373
    T0 = res & 0xffffffff;
348 374
    env->y = res >> 32;
349 375
}
......
358 384

  
359 385
void OPPROTO op_mulscc_T1_T0(void)
360 386
{
361
    unsigned int b1, N, V, b2, src1;
387
    unsigned int b1, N, V, b2;
388
    target_ulong src1;
389

  
362 390
    N = FLAG_SET(PSR_NEG);
363 391
    V = FLAG_SET(PSR_OVF);
364 392
    b1 = N ^ V;
......
372 400
    env->psr = 0;
373 401
    if (!T0)
374 402
	env->psr |= PSR_ZERO;
375
    if ((int) T0 < 0)
403
    if ((int32_t) T0 < 0)
376 404
	env->psr |= PSR_NEG;
377 405
    if (T0 < src1)
378 406
	env->psr |= PSR_CARRY;
......
405 433
    int64_t x0;
406 434
    int32_t x1;
407 435

  
408
    x0 = T0 | ((uint64_t) (env->y) << 32);
436
    x0 = T0 | ((int64_t) (env->y) << 32);
409 437
    x1 = T1;
410 438
    x0 = x0 / x1;
411 439
    if ((int32_t) x0 != x0) {
412
	T0 = x0 >> 63;
440
	T0 = x0 < 0? 0x80000000: 0x7fffffff;
413 441
	T1 = 1;
414 442
    } else {
415 443
	T0 = x0;
......
423 451
    env->psr = 0;
424 452
    if (!T0)
425 453
	env->psr |= PSR_ZERO;
426
    if ((int) T0 < 0)
454
    if ((int32_t) T0 < 0)
427 455
	env->psr |= PSR_NEG;
428 456
    if (T1)
429 457
	env->psr |= PSR_OVF;
458
    /* V9 xcc */
430 459
    FORCE_RET();
431 460
}
432 461

  
433
void OPPROTO op_subx_T1_T0(void)
434
{
435
    T0 -= T1 + ((env->psr & PSR_CARRY) ? 1 : 0);
436
}
437

  
438 462
void OPPROTO op_logic_T0_cc(void)
439 463
{
440 464
    env->psr = 0;
441 465
    if (!T0)
442 466
	env->psr |= PSR_ZERO;
443
    if ((int) T0 < 0)
444
	env->psr |= PSR_NEG;
445
    FORCE_RET();
446
}
447

  
448
void OPPROTO op_set_flags(void)
449
{
450
    env->psr = 0;
451
    if (!T0)
452
	env->psr |= PSR_ZERO;
453
    if ((unsigned int) T0 < (unsigned int) T1)
454
	env->psr |= PSR_CARRY;
455
    if ((int) T0 < (int) T1)
456
	env->psr |= PSR_OVF;
457
    if ((int) T0 < 0)
467
    if ((int32_t) T0 < 0)
458 468
	env->psr |= PSR_NEG;
469
    /* V9 xcc */
459 470
    FORCE_RET();
460 471
}
461 472

  
......
519 530

  
520 531
void OPPROTO op_rdpsr(void)
521 532
{
522
    T0 = GET_PSR(env);
533
    do_rdpsr();
523 534
}
524 535

  
525 536
void OPPROTO op_wrpsr(void)
526 537
{
527
    PUT_PSR(env,T0);
538
    do_wrpsr();
528 539
    FORCE_RET();
529 540
}
530 541

  
......
555 566
   handling ? */
556 567
void OPPROTO op_save(void)
557 568
{
558
    int cwp;
569
    uint32_t cwp;
559 570
    cwp = (env->cwp - 1) & (NWINDOWS - 1); 
560 571
    if (env->wim & (1 << cwp)) {
561 572
        raise_exception(TT_WIN_OVF);
......
566 577

  
567 578
void OPPROTO op_restore(void)
568 579
{
569
    int cwp;
580
    uint32_t cwp;
570 581
    cwp = (env->cwp + 1) & (NWINDOWS - 1); 
571 582
    if (env->wim & (1 << cwp)) {
572 583
        raise_exception(TT_WIN_UNF);
......
626 637

  
627 638
void OPPROTO op_eval_be(void)
628 639
{
629
    T2 = (env->psr & PSR_ZERO);
640
    T2 = FLAG_SET(PSR_ZERO);
630 641
}
631 642

  
632 643
void OPPROTO op_eval_ble(void)
633 644
{
634
    unsigned int Z = FLAG_SET(PSR_ZERO), N = FLAG_SET(PSR_NEG), V = FLAG_SET(PSR_OVF);
645
    target_ulong Z = FLAG_SET(PSR_ZERO), N = FLAG_SET(PSR_NEG), V = FLAG_SET(PSR_OVF);
635 646
    
636 647
    T2 = Z | (N ^ V);
637 648
}
638 649

  
639 650
void OPPROTO op_eval_bl(void)
640 651
{
641
    unsigned int N = FLAG_SET(PSR_NEG), V = FLAG_SET(PSR_OVF);
652
    target_ulong N = FLAG_SET(PSR_NEG), V = FLAG_SET(PSR_OVF);
642 653

  
643 654
    T2 = N ^ V;
644 655
}
645 656

  
646 657
void OPPROTO op_eval_bleu(void)
647 658
{
648
    unsigned int Z = FLAG_SET(PSR_ZERO), C = FLAG_SET(PSR_CARRY);
659
    target_ulong Z = FLAG_SET(PSR_ZERO), C = FLAG_SET(PSR_CARRY);
649 660

  
650 661
    T2 = C | Z;
651 662
}
652 663

  
653 664
void OPPROTO op_eval_bcs(void)
654 665
{
655
    T2 = (env->psr & PSR_CARRY);
666
    T2 = FLAG_SET(PSR_CARRY);
656 667
}
657 668

  
658 669
void OPPROTO op_eval_bvs(void)
659 670
{
660
    T2 = (env->psr & PSR_OVF);
671
    T2 = FLAG_SET(PSR_OVF);
661 672
}
662 673

  
663 674
void OPPROTO op_eval_bneg(void)
664 675
{
665
    T2 = (env->psr & PSR_NEG);
676
    T2 = FLAG_SET(PSR_NEG);
666 677
}
667 678

  
668 679
void OPPROTO op_eval_bne(void)
669 680
{
670
    T2 = !(env->psr & PSR_ZERO);
681
    T2 = !FLAG_SET(PSR_ZERO);
671 682
}
672 683

  
673 684
void OPPROTO op_eval_bg(void)
674 685
{
675
    unsigned int Z = FLAG_SET(PSR_ZERO), N = FLAG_SET(PSR_NEG), V = FLAG_SET(PSR_OVF);
686
    target_ulong Z = FLAG_SET(PSR_ZERO), N = FLAG_SET(PSR_NEG), V = FLAG_SET(PSR_OVF);
676 687

  
677 688
    T2 = !(Z | (N ^ V));
678 689
}
679 690

  
680 691
void OPPROTO op_eval_bge(void)
681 692
{
682
    unsigned int N = FLAG_SET(PSR_NEG), V = FLAG_SET(PSR_OVF);
693
    target_ulong N = FLAG_SET(PSR_NEG), V = FLAG_SET(PSR_OVF);
683 694

  
684 695
    T2 = !(N ^ V);
685 696
}
686 697

  
687 698
void OPPROTO op_eval_bgu(void)
688 699
{
689
    unsigned int Z = FLAG_SET(PSR_ZERO), C = FLAG_SET(PSR_CARRY);
700
    target_ulong Z = FLAG_SET(PSR_ZERO), C = FLAG_SET(PSR_CARRY);
690 701

  
691 702
    T2 = !(C | Z);
692 703
}
693 704

  
694 705
void OPPROTO op_eval_bcc(void)
695 706
{
696
    T2 = !(env->psr & PSR_CARRY);
707
    T2 = !FLAG_SET(PSR_CARRY);
697 708
}
698 709

  
699 710
void OPPROTO op_eval_bpos(void)
700 711
{
701
    T2 = !(env->psr & PSR_NEG);
712
    T2 = !FLAG_SET(PSR_NEG);
702 713
}
703 714

  
704 715
void OPPROTO op_eval_bvc(void)
705 716
{
706
    T2 = !(env->psr & PSR_OVF);
717
    T2 = !FLAG_SET(PSR_OVF);
707 718
}
708 719

  
709 720
/* FCC1:FCC0: 0 =, 1 <, 2 >, 3 u */
......
792 803
    T2 = !(FFLAG_SET(FSR_FCC0) & FFLAG_SET(FSR_FCC1));
793 804
}
794 805

  
795
void OPPROTO op_movl_T2_0(void)
796
{
797
    T2 = 0;
798
}
799

  
800
void OPPROTO op_movl_T2_1(void)
801
{
802
    T2 = 1;
803
}
804

  
805 806
void OPPROTO op_jmp_im(void)
806 807
{
807 808
    env->pc = PARAM1;
......
845 846
{
846 847
    if (T2) {
847 848
	env->npc = PARAM2; /* XXX: optimize */
848
        JUMP_TB(op_generic_branch_a, PARAM1, 0, PARAM3);
849
        JUMP_TB(op_branch_a, PARAM1, 0, PARAM3);
849 850
    } else {
850 851
	env->npc = PARAM3 + 8; /* XXX: optimize */
851
        JUMP_TB(op_generic_branch_a, PARAM1, 1, PARAM3 + 4);
852
        JUMP_TB(op_branch_a, PARAM1, 1, PARAM3 + 4);
852 853
    }
853 854
    FORCE_RET();
854 855
}

Also available in: Unified diff