Skip to content

Commit 9999054

Browse files
committed
[MC68000] Accept Data/Address register as FMOVEM operand
1 parent 89cdc99 commit 9999054

File tree

2 files changed

+58
-42
lines changed

2 files changed

+58
-42
lines changed

src/table_mc68000.cpp

+50-34
Original file line numberDiff line numberDiff line change
@@ -560,10 +560,18 @@ static constexpr Entry MC68881_ARITH[] PROGMEM = {
560560
P2(0xF000, TEXT_FMOVE, ISZ_FIXD, M_RADDR, M_FPIAR, OP_10, OP___, SZ_LONG, 0x8400),
561561
P2(0xF000, TEXT_FMOVE, ISZ_FIXD, M_RADDR, M_FPSR, OP_10, OP___, SZ_LONG, 0x8800),
562562
P2(0xF000, TEXT_FMOVE, ISZ_FIXD, M_RADDR, M_FPCR, OP_10, OP___, SZ_LONG, 0x9000),
563+
P2(0xF000, TEXT_FMOVEM, ISZ_FIXD, M_AREG, M_FPIAR, OP_10, OP___, SZ_LONG, 0x8400),
564+
P2(0xF000, TEXT_FMOVEM, ISZ_FIXD, M_DREG, M_FPIAR, OP_10, OP___, SZ_LONG, 0x8400),
565+
P2(0xF000, TEXT_FMOVEM, ISZ_FIXD, M_DREG, M_FPSR, OP_10, OP___, SZ_LONG, 0x8800),
566+
P2(0xF000, TEXT_FMOVEM, ISZ_FIXD, M_DREG, M_FPCR, OP_10, OP___, SZ_LONG, 0x9000),
563567
P2(0xF000, TEXT_FMOVEM, ISZ_FIXD, M_RADDR, M_FCMLT, OP_10, EX_RX, SZ_LONG, 0x8000),
564568
P2(0xF000, TEXT_FMOVE, ISZ_FIXD, M_FPIAR, M_WADDR, OP___, OP_10, SZ_LONG, 0xA400),
565569
P2(0xF000, TEXT_FMOVE, ISZ_FIXD, M_FPSR, M_WADDR, OP___, OP_10, SZ_LONG, 0xA800),
566570
P2(0xF000, TEXT_FMOVE, ISZ_FIXD, M_FPCR, M_WADDR, OP___, OP_10, SZ_LONG, 0xB000),
571+
P2(0xF000, TEXT_FMOVEM, ISZ_FIXD, M_FPIAR, M_AREG, OP___, OP_10, SZ_LONG, 0xA400),
572+
P2(0xF000, TEXT_FMOVEM, ISZ_FIXD, M_FPIAR, M_DREG, OP___, OP_10, SZ_LONG, 0xA400),
573+
P2(0xF000, TEXT_FMOVEM, ISZ_FIXD, M_FPSR, M_DREG, OP___, OP_10, SZ_LONG, 0xA800),
574+
P2(0xF000, TEXT_FMOVEM, ISZ_FIXD, M_FPCR, M_DREG, OP___, OP_10, SZ_LONG, 0xB000),
567575
P2(0xF000, TEXT_FMOVEM, ISZ_FIXD, M_FCMLT, M_WADDR, EX_RX, OP_10, SZ_LONG, 0xA000),
568576
P2(0xF000, TEXT_FMOVEM, ISZ_FIXD, M_FPMLT, M_DADDR, EX_SL, OP_10, SZ_XTND, 0xE000),
569577
P2(0xF000, TEXT_FMOVEM, ISZ_FIXD, M_DREG, M_DADDR, EX_DL, OP_10, SZ_XTND, 0xE800),
@@ -606,61 +614,61 @@ static constexpr Entry MC68881_ARITH[] PROGMEM = {
606614
static constexpr uint8_t MC68881_ARITH_INDEX[] PROGMEM = {
607615
19, // TEXT_FABS
608616
57, // TEXT_FABS
609-
113, // TEXT_FABS
617+
121, // TEXT_FABS
610618
22, // TEXT_FACOS
611619
60, // TEXT_FACOS
612-
116, // TEXT_FACOS
620+
124, // TEXT_FACOS
613621
28, // TEXT_FADD
614622
66, // TEXT_FADD
615623
9, // TEXT_FASIN
616624
47, // TEXT_FASIN
617-
103, // TEXT_FASIN
625+
111, // TEXT_FASIN
618626
8, // TEXT_FATAN
619627
46, // TEXT_FATAN
620-
102, // TEXT_FATAN
628+
110, // TEXT_FATAN
621629
10, // TEXT_FATANH
622630
48, // TEXT_FATANH
623-
104, // TEXT_FATANH
631+
112, // TEXT_FATANH
624632
36, // TEXT_FCMP
625633
74, // TEXT_FCMP
626634
23, // TEXT_FCOS
627635
61, // TEXT_FCOS
628-
117, // TEXT_FCOS
636+
125, // TEXT_FCOS
629637
20, // TEXT_FCOSH
630638
58, // TEXT_FCOSH
631-
114, // TEXT_FCOSH
639+
122, // TEXT_FCOSH
632640
26, // TEXT_FDIV
633641
64, // TEXT_FDIV
634642
13, // TEXT_FETOX
635643
51, // TEXT_FETOX
636-
107, // TEXT_FETOX
644+
115, // TEXT_FETOX
637645
6, // TEXT_FETOXM1
638646
44, // TEXT_FETOXM1
639-
100, // TEXT_FETOXM1
647+
108, // TEXT_FETOXM1
640648
24, // TEXT_FGETEXP
641649
62, // TEXT_FGETEXP
642-
118, // TEXT_FGETEXP
650+
126, // TEXT_FGETEXP
643651
25, // TEXT_FGETMAN
644652
63, // TEXT_FGETMAN
645-
119, // TEXT_FGETMAN
653+
127, // TEXT_FGETMAN
646654
1, // TEXT_FINT
647655
39, // TEXT_FINT
648-
95, // TEXT_FINT
656+
103, // TEXT_FINT
649657
3, // TEXT_FINTRZ
650658
41, // TEXT_FINTRZ
651-
97, // TEXT_FINTRZ
659+
105, // TEXT_FINTRZ
652660
17, // TEXT_FLOG10
653661
55, // TEXT_FLOG10
654-
111, // TEXT_FLOG10
662+
119, // TEXT_FLOG10
655663
18, // TEXT_FLOG2
656664
56, // TEXT_FLOG2
657-
112, // TEXT_FLOG2
665+
120, // TEXT_FLOG2
658666
16, // TEXT_FLOGN
659667
54, // TEXT_FLOGN
660-
110, // TEXT_FLOGN
668+
118, // TEXT_FLOGN
661669
5, // TEXT_FLOGNP1
662670
43, // TEXT_FLOGNP1
663-
99, // TEXT_FLOGNP1
671+
107, // TEXT_FLOGNP1
664672
27, // TEXT_FMOD
665673
65, // TEXT_FMOD
666674
0, // TEXT_FMOVE
@@ -671,29 +679,37 @@ static constexpr uint8_t MC68881_ARITH_INDEX[] PROGMEM = {
671679
79, // TEXT_FMOVE
672680
80, // TEXT_FMOVE
673681
81, // TEXT_FMOVE
674-
83, // TEXT_FMOVE
675-
84, // TEXT_FMOVE
676-
85, // TEXT_FMOVE
677-
120, // TEXT_FMOVECR
682+
87, // TEXT_FMOVE
683+
88, // TEXT_FMOVE
684+
89, // TEXT_FMOVE
685+
128, // TEXT_FMOVECR
678686
82, // TEXT_FMOVEM
687+
83, // TEXT_FMOVEM
688+
84, // TEXT_FMOVEM
689+
85, // TEXT_FMOVEM
679690
86, // TEXT_FMOVEM
680-
87, // TEXT_FMOVEM
681-
88, // TEXT_FMOVEM
682-
89, // TEXT_FMOVEM
683691
90, // TEXT_FMOVEM
684692
91, // TEXT_FMOVEM
685693
92, // TEXT_FMOVEM
686694
93, // TEXT_FMOVEM
687695
94, // TEXT_FMOVEM
696+
95, // TEXT_FMOVEM
697+
96, // TEXT_FMOVEM
698+
97, // TEXT_FMOVEM
699+
98, // TEXT_FMOVEM
700+
99, // TEXT_FMOVEM
701+
100, // TEXT_FMOVEM
702+
101, // TEXT_FMOVEM
703+
102, // TEXT_FMOVEM
688704
29, // TEXT_FMUL
689705
67, // TEXT_FMUL
690706
21, // TEXT_FNEG
691707
59, // TEXT_FNEG
692-
115, // TEXT_FNEG
708+
123, // TEXT_FNEG
693709
31, // TEXT_FREM
694710
69, // TEXT_FREM
695-
122, // TEXT_FRESTORE
696-
121, // TEXT_FSAVE
711+
130, // TEXT_FRESTORE
712+
129, // TEXT_FSAVE
697713
32, // TEXT_FSCALE
698714
70, // TEXT_FSCALE
699715
30, // TEXT_FSGLDIV
@@ -702,31 +718,31 @@ static constexpr uint8_t MC68881_ARITH_INDEX[] PROGMEM = {
702718
71, // TEXT_FSGLMUL
703719
11, // TEXT_FSIN
704720
49, // TEXT_FSIN
705-
105, // TEXT_FSIN
721+
113, // TEXT_FSIN
706722
35, // TEXT_FSINCOS
707723
73, // TEXT_FSINCOS
708724
2, // TEXT_FSINH
709725
40, // TEXT_FSINH
710-
96, // TEXT_FSINH
726+
104, // TEXT_FSINH
711727
4, // TEXT_FSQRT
712728
42, // TEXT_FSQRT
713-
98, // TEXT_FSQRT
729+
106, // TEXT_FSQRT
714730
34, // TEXT_FSUB
715731
72, // TEXT_FSUB
716732
12, // TEXT_FTAN
717733
50, // TEXT_FTAN
718-
106, // TEXT_FTAN
734+
114, // TEXT_FTAN
719735
7, // TEXT_FTANH
720736
45, // TEXT_FTANH
721-
101, // TEXT_FTANH
737+
109, // TEXT_FTANH
722738
15, // TEXT_FTENTOX
723739
53, // TEXT_FTENTOX
724-
109, // TEXT_FTENTOX
740+
117, // TEXT_FTENTOX
725741
37, // TEXT_FTST
726742
75, // TEXT_FTST
727743
14, // TEXT_FTWOTOX
728744
52, // TEXT_FTWOTOX
729-
108, // TEXT_FTWOTOX
745+
116, // TEXT_FTWOTOX
730746
};
731747

732748
static constexpr Entry MC68881_BRANCH[] PROGMEM = {

test/test_asm_mc68000.cpp

+8-8
Original file line numberDiff line numberDiff line change
@@ -3003,12 +3003,12 @@ static void test_float_move() {
30033003
ERRT("FMOVE.L FPSR, #$1234", OPERAND_NOT_ALLOWED, "FPSR, #$1234");
30043004
ERRT("FMOVE.L FPIAR, #$1234", OPERAND_NOT_ALLOWED, "FPIAR, #$1234");
30053005

3006-
ERRT("FMOVEM.L D0, FPCR", ILLEGAL_OPERAND_MODE, "D0, FPCR", 0xF200|000, 0x9000);
3007-
ERRT("FMOVEM.L D1, FPSR", ILLEGAL_OPERAND_MODE, "D1, FPSR", 0xF200|001, 0x8800);
3008-
ERRT("FMOVEM.L D2, FPIAR", ILLEGAL_OPERAND_MODE, "D2, FPIAR", 0xF200|002, 0x8400);
3006+
TEST("FMOVEM.L D0, FPCR", 0xF200|000, 0x9000);
3007+
TEST("FMOVEM.L D1, FPSR", 0xF200|001, 0x8800);
3008+
TEST("FMOVEM.L D2, FPIAR", 0xF200|002, 0x8400);
30093009
ERRT("FMOVEM.L A3, FPCR", ILLEGAL_OPERAND_MODE, "A3, FPCR", 0xF200|013, 0x9000);
30103010
ERRT("FMOVEM.L A4, FPSR", ILLEGAL_OPERAND_MODE, "A4, FPSR", 0xF200|014, 0x8800);
3011-
ERRT("FMOVEM.L A5, FPIAR", ILLEGAL_OPERAND_MODE, "A5, FPIAR", 0xF200|015, 0x8400);
3011+
TEST("FMOVEM.L A5, FPIAR", 0xF200|015, 0x8400);
30123012
ERRT("FMOVEM.L FPCR/FPSR, D1", ILLEGAL_OPERAND_MODE, "D1", 0xF200|001, 0xB800);
30133013
ERRT("FMOVEM.L FPSR/FPIAR, A2", ILLEGAL_OPERAND_MODE, "A2", 0xF200|012, 0xAC00);
30143014
TEST("FMOVEM.L FPCR/FPIAR, (A3)", 0xF200|023, 0xB400);
@@ -3022,12 +3022,12 @@ static void test_float_move() {
30223022
ERRT("FMOVEM.L FPCR/FPIAR, (*+76,PC,A4.L)", OPERAND_NOT_ALLOWED, "FPCR/FPIAR, (*+76,PC,A4.L)");
30233023
ERRT("FMOVEM.L FPCR/FPSR/FPIAR, #$1234", OPERAND_NOT_ALLOWED, "FPCR/FPSR/FPIAR, #$1234");
30243024

3025-
ERRT("FMOVEM.L D0, FPCR", ILLEGAL_OPERAND_MODE, "D0, FPCR", 0xF200|000, 0x9000);
3026-
ERRT("FMOVEM.L D1, FPSR", ILLEGAL_OPERAND_MODE, "D1, FPSR", 0xF200|001, 0x8800);
3027-
ERRT("FMOVEM.L D2, FPIAR", ILLEGAL_OPERAND_MODE, "D2, FPIAR", 0xF200|002, 0x8400);
3025+
TEST("FMOVEM.L D0, FPCR", 0xF200|000, 0x9000);
3026+
TEST("FMOVEM.L D1, FPSR", 0xF200|001, 0x8800);
3027+
TEST("FMOVEM.L D2, FPIAR", 0xF200|002, 0x8400);
30283028
ERRT("FMOVEM.L A3, FPCR", ILLEGAL_OPERAND_MODE, "A3, FPCR", 0xF200|013, 0x9000);
30293029
ERRT("FMOVEM.L A4, FPSR", ILLEGAL_OPERAND_MODE, "A4, FPSR", 0xF200|014, 0x8800);
3030-
ERRT("FMOVEM.L A5, FPIAR", ILLEGAL_OPERAND_MODE, "A5, FPIAR", 0xF200|015, 0x8400);
3030+
TEST("FMOVEM.L A5, FPIAR", 0xF200|015, 0x8400);
30313031
ERRT("FMOVEM.L D1, FPCR/FPSR", ILLEGAL_OPERAND_MODE, "D1, FPCR/FPSR", 0xF200|001, 0x9800);
30323032
ERRT("FMOVEM.L A2, FPSR/FPIAR", ILLEGAL_OPERAND_MODE, "A2, FPSR/FPIAR", 0xF200|012, 0x8C00);
30333033
TEST("FMOVEM.L (A3), FPCR/FPIAR", 0xF200|023, 0x9400);

0 commit comments

Comments
 (0)