Revision 57fec1fe target-i386/op.c

b/target-i386/op.c
172 172

  
173 173
/* operations without flags */
174 174

  
175
void OPPROTO op_addl_T0_T1(void)
176
{
177
    T0 += T1;
178
}
179

  
180
void OPPROTO op_orl_T0_T1(void)
181
{
182
    T0 |= T1;
183
}
184

  
185
void OPPROTO op_andl_T0_T1(void)
186
{
187
    T0 &= T1;
188
}
189

  
190
void OPPROTO op_subl_T0_T1(void)
191
{
192
    T0 -= T1;
193
}
194

  
195
void OPPROTO op_xorl_T0_T1(void)
196
{
197
    T0 ^= T1;
198
}
199

  
200 175
void OPPROTO op_negl_T0(void)
201 176
{
202 177
    T0 = -T0;
......
217 192
    T0 = ~T0;
218 193
}
219 194

  
220
void OPPROTO op_bswapl_T0(void)
221
{
222
    T0 = bswap32(T0);
223
}
224

  
225
#ifdef TARGET_X86_64
226
void OPPROTO op_bswapq_T0(void)
227
{
228
    helper_bswapq_T0();
229
}
230
#endif
231

  
232 195
/* multiply/divide */
233 196

  
234 197
/* XXX: add eflags optimizations */
......
399 362
    EDX = (EDX & ~0xffff) | r;
400 363
}
401 364

  
402
void OPPROTO op_divl_EAX_T0(void)
403
{
404
    helper_divl_EAX_T0();
405
}
406

  
407
void OPPROTO op_idivl_EAX_T0(void)
408
{
409
    helper_idivl_EAX_T0();
410
}
411

  
412 365
#ifdef TARGET_X86_64
413 366
void OPPROTO op_divq_EAX_T0(void)
414 367
{
......
424 377
/* constant load & misc op */
425 378

  
426 379
/* XXX: consistent names */
427
void OPPROTO op_movl_T0_imu(void)
428
{
429
    T0 = (uint32_t)PARAM1;
430
}
431

  
432
void OPPROTO op_movl_T0_im(void)
433
{
434
    T0 = (int32_t)PARAM1;
435
}
436

  
437
void OPPROTO op_addl_T0_im(void)
438
{
439
    T0 += PARAM1;
440
}
441

  
442
void OPPROTO op_andl_T0_ffff(void)
443
{
444
    T0 = T0 & 0xffff;
445
}
446

  
447
void OPPROTO op_andl_T0_im(void)
448
{
449
    T0 = T0 & PARAM1;
450
}
451

  
452
void OPPROTO op_movl_T0_T1(void)
453
{
454
    T0 = T1;
455
}
456

  
457
void OPPROTO op_movl_T1_imu(void)
458
{
459
    T1 = (uint32_t)PARAM1;
460
}
461

  
462
void OPPROTO op_movl_T1_im(void)
463
{
464
    T1 = (int32_t)PARAM1;
465
}
466

  
467 380
void OPPROTO op_addl_T1_im(void)
468 381
{
469 382
    T1 += PARAM1;
......
474 387
    T1 = A0;
475 388
}
476 389

  
477
void OPPROTO op_movl_A0_im(void)
478
{
479
    A0 = (uint32_t)PARAM1;
480
}
481

  
482
void OPPROTO op_addl_A0_im(void)
483
{
484
    A0 = (uint32_t)(A0 + PARAM1);
485
}
486

  
487
void OPPROTO op_movl_A0_seg(void)
488
{
489
    A0 = (uint32_t)*(target_ulong *)((char *)env + PARAM1);
490
}
491

  
492
void OPPROTO op_addl_A0_seg(void)
493
{
494
    A0 = (uint32_t)(A0 + *(target_ulong *)((char *)env + PARAM1));
495
}
496

  
497 390
void OPPROTO op_addl_A0_AL(void)
498 391
{
499 392
    A0 = (uint32_t)(A0 + (EAX & 0xff));
......
523 416

  
524 417
#ifdef TARGET_X86_64
525 418

  
526
void OPPROTO op_movq_T0_im64(void)
527
{
528
    T0 = PARAMQ1;
529
}
530

  
531
void OPPROTO op_movq_T1_im64(void)
532
{
533
    T1 = PARAMQ1;
534
}
535

  
536
void OPPROTO op_movq_A0_im(void)
537
{
538
    A0 = (int32_t)PARAM1;
539
}
540

  
541
void OPPROTO op_movq_A0_im64(void)
542
{
543
    A0 = PARAMQ1;
544
}
545

  
546
void OPPROTO op_addq_A0_im(void)
547
{
548
    A0 = (A0 + (int32_t)PARAM1);
549
}
550

  
551
void OPPROTO op_addq_A0_im64(void)
552
{
553
    A0 = (A0 + PARAMQ1);
554
}
555

  
556
void OPPROTO op_movq_A0_seg(void)
557
{
558
    A0 = *(target_ulong *)((char *)env + PARAM1);
559
}
560

  
561
void OPPROTO op_addq_A0_seg(void)
562
{
563
    A0 += *(target_ulong *)((char *)env + PARAM1);
564
}
565

  
566 419
void OPPROTO op_addq_A0_AL(void)
567 420
{
568 421
    A0 = (A0 + (EAX & 0xff));
......
570 423

  
571 424
#endif
572 425

  
573
void OPPROTO op_andl_A0_ffff(void)
574
{
575
    A0 = A0 & 0xffff;
576
}
577

  
578 426
/* memory access */
579 427

  
580 428
#define MEMSUFFIX _raw
......
588 436
#include "ops_mem.h"
589 437
#endif
590 438

  
591
/* indirect jump */
592

  
593
void OPPROTO op_jmp_T0(void)
594
{
595
    EIP = T0;
596
}
597

  
598
void OPPROTO op_movl_eip_im(void)
599
{
600
    EIP = (uint32_t)PARAM1;
601
}
602

  
603
#ifdef TARGET_X86_64
604
void OPPROTO op_movq_eip_im(void)
605
{
606
    EIP = (int32_t)PARAM1;
607
}
608

  
609
void OPPROTO op_movq_eip_im64(void)
610
{
611
    EIP = PARAMQ1;
612
}
613
#endif
614

  
615 439
void OPPROTO op_hlt(void)
616 440
{
617 441
    helper_hlt();
......
735 559
    helper_single_step();
736 560
}
737 561

  
738
void OPPROTO op_movl_T0_0(void)
739
{
740
    T0 = 0;
741
}
742

  
743
void OPPROTO op_exit_tb(void)
744
{
745
    EXIT_TB();
746
}
747

  
748 562
/* multiple size ops */
749 563

  
750 564
#define ldul ldl
......
879 693
}
880 694
#endif
881 695

  
882
/* push/pop utils */
883

  
884
void op_addl_A0_SS(void)
885
{
886
    A0 = (uint32_t)(A0 + env->segs[R_SS].base);
887
}
888

  
889
void op_subl_A0_2(void)
890
{
891
    A0 = (uint32_t)(A0 - 2);
892
}
893

  
894
void op_subl_A0_4(void)
895
{
896
    A0 = (uint32_t)(A0 - 4);
897
}
898

  
899
void op_addl_ESP_4(void)
900
{
901
    ESP = (uint32_t)(ESP + 4);
902
}
903

  
904
void op_addl_ESP_2(void)
905
{
906
    ESP = (uint32_t)(ESP + 2);
907
}
908

  
909
void op_addw_ESP_4(void)
910
{
911
    ESP = (ESP & ~0xffff) | ((ESP + 4) & 0xffff);
912
}
913

  
914
void op_addw_ESP_2(void)
915
{
916
    ESP = (ESP & ~0xffff) | ((ESP + 2) & 0xffff);
917
}
918

  
919
void op_addl_ESP_im(void)
920
{
921
    ESP = (uint32_t)(ESP + PARAM1);
922
}
923

  
924
void op_addw_ESP_im(void)
925
{
926
    ESP = (ESP & ~0xffff) | ((ESP + PARAM1) & 0xffff);
927
}
928

  
929
#ifdef TARGET_X86_64
930
void op_subq_A0_2(void)
931
{
932
    A0 -= 2;
933
}
934

  
935
void op_subq_A0_8(void)
936
{
937
    A0 -= 8;
938
}
939

  
940
void op_addq_ESP_8(void)
941
{
942
    ESP += 8;
943
}
944

  
945
void op_addq_ESP_im(void)
946
{
947
    ESP += PARAM1;
948
}
949
#endif
950

  
951 696
void OPPROTO op_rdtsc(void)
952 697
{
953 698
    helper_rdtsc();
......
1362 1107

  
1363 1108
/* flags handling */
1364 1109

  
1365
void OPPROTO op_goto_tb0(void)
1366
{
1367
    GOTO_TB(op_goto_tb0, PARAM1, 0);
1368
}
1369

  
1370
void OPPROTO op_goto_tb1(void)
1371
{
1372
    GOTO_TB(op_goto_tb1, PARAM1, 1);
1373
}
1374

  
1375 1110
void OPPROTO op_jmp_label(void)
1376 1111
{
1377 1112
    GOTO_LABEL_PARAM(1);
......
1451 1186
    T0 ^= 1;
1452 1187
}
1453 1188

  
1454
void OPPROTO op_set_cc_op(void)
1455
{
1456
    CC_OP = PARAM1;
1457
}
1458

  
1459 1189
void OPPROTO op_mov_T0_cc(void)
1460 1190
{
1461 1191
    T0 = cc_table[CC_OP].compute_all();

Also available in: Unified diff