@@ -365,13 +365,14 @@ def MOVM32mp_P : MxMOVEM_RM_Pseudo<MxType32r, MxType32.POp>;
365
365
// ons that will be resolved sometime after RA pass.
366
366
//===----------------------------------------------------------------------===//
367
367
368
+ /// Move to CCR
368
369
/// --------------------------------------------------
369
370
/// F E D C B A 9 8 7 6 | 5 4 3 | 2 1 0
370
371
/// --------------------------------------------------
371
372
/// | EFFECTIVE ADDRESS
372
373
/// 0 1 0 0 0 1 0 0 1 1 | MODE | REG
373
374
/// --------------------------------------------------
374
- let Defs = [CCR] in
375
+ let Defs = [CCR] in {
375
376
class MxMoveToCCR<MxOperand MEMOp, MxEncMemOp SRC_ENC>
376
377
: MxInst<(outs CCRC:$dst), (ins MEMOp:$src), "move.w\t$src, $dst", []> {
377
378
let Inst = (ascend
@@ -382,6 +383,7 @@ class MxMoveToCCR<MxOperand MEMOp, MxEncMemOp SRC_ENC>
382
383
383
384
class MxMoveToCCRPseudo<MxOperand MEMOp>
384
385
: MxPseudo<(outs CCRC:$dst), (ins MEMOp:$src)>;
386
+ } // let Defs = [CCR]
385
387
386
388
let mayLoad = 1 in
387
389
foreach AM = MxMoveSupportedAMs in {
@@ -434,6 +436,64 @@ foreach AM = MxMoveSupportedAMs in {
434
436
def MOV16dc : MxMoveFromCCR_R;
435
437
def MOV8dc : MxMoveFromCCRPseudo<MxOp8AddrMode_d.Op>;
436
438
439
+ /// Move to SR
440
+ /// --------------------------------------------------
441
+ /// F E D C B A 9 8 7 6 | 5 4 3 | 2 1 0
442
+ /// --------------------------------------------------
443
+ /// | EFFECTIVE ADDRESS
444
+ /// 0 1 0 0 0 1 1 0 1 1 | MODE | REG
445
+ /// --------------------------------------------------
446
+ let Defs = [SR] in {
447
+ class MxMoveToSR<MxOperand MEMOp, MxEncMemOp SRC_ENC>
448
+ : MxInst<(outs SRC:$dst), (ins MEMOp:$src), "move.w\t$src, $dst", []> {
449
+ let Inst = (ascend
450
+ (descend 0b0100011011, SRC_ENC.EA),
451
+ SRC_ENC.Supplement
452
+ );
453
+ }
454
+ } // let Defs = [SR]
455
+
456
+ let mayLoad = 1 in
457
+ foreach AM = MxMoveSupportedAMs in {
458
+ def MOV16s # AM : MxMoveToSR<!cast<MxOpBundle>("MxOp16AddrMode_"#AM).Op,
459
+ !cast<MxEncMemOp>("MxMoveSrcOpEnc_"#AM)>;
460
+ } // foreach AM
461
+
462
+ def MOV16sd : MxMoveToSR<MxOp16AddrMode_d.Op, MxMoveSrcOpEnc_d>;
463
+
464
+ /// Move from SR
465
+ /// --------------------------------------------------
466
+ /// F E D C B A 9 8 7 6 | 5 4 3 | 2 1 0
467
+ /// --------------------------------------------------
468
+ /// | EFFECTIVE ADDRESS
469
+ /// 0 1 0 0 0 0 0 0 1 1 | MODE | REG
470
+ /// --------------------------------------------------
471
+ let Uses = [SR] in {
472
+ class MxMoveFromSR_R
473
+ : MxInst<(outs MxDRD16:$dst), (ins SRC:$src), "move.w\t$src, $dst", []>,
474
+ Requires<[ AtLeastM68010 ]> {
475
+ let Inst = (descend 0b0100000011, MxEncAddrMode_d<"dst">.EA);
476
+ }
477
+
478
+ class MxMoveFromSR_M<MxOperand MEMOp, MxEncMemOp DST_ENC>
479
+ : MxInst<(outs), (ins MEMOp:$dst, SRC:$src), "move.w\t$src, $dst", []>,
480
+ Requires<[ AtLeastM68010 ]> {
481
+ let Inst = (ascend
482
+ (descend 0b0100000011, DST_ENC.EA),
483
+ DST_ENC.Supplement
484
+ );
485
+ }
486
+ } // let Uses = [SR]
487
+
488
+ let mayStore = 1 in
489
+ foreach AM = MxMoveSupportedAMs in {
490
+ def MOV16 # AM # s
491
+ : MxMoveFromSR_M<!cast<MxOpBundle>("MxOp16AddrMode_"#AM).Op,
492
+ !cast<MxEncMemOp>("MxMoveDstOpEnc_"#AM)>;
493
+ } // foreach AM
494
+
495
+ def MOV16ds : MxMoveFromSR_R;
496
+
437
497
//===----------------------------------------------------------------------===//
438
498
// LEA
439
499
//===----------------------------------------------------------------------===//
0 commit comments