@@ -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 {
@@ -436,6 +438,64 @@ foreach AM = MxMoveSupportedAMs in {
436
438
def MOV16dc : MxMoveFromCCR_R;
437
439
def MOV8dc : MxMoveFromCCR_RPseudo<MxOp8AddrMode_d.Op>;
438
440
441
+ /// Move to SR
442
+ /// --------------------------------------------------
443
+ /// F E D C B A 9 8 7 6 | 5 4 3 | 2 1 0
444
+ /// --------------------------------------------------
445
+ /// | EFFECTIVE ADDRESS
446
+ /// 0 1 0 0 0 1 1 0 1 1 | MODE | REG
447
+ /// --------------------------------------------------
448
+ let Defs = [SR] in {
449
+ class MxMoveToSR<MxOperand MEMOp, MxEncMemOp SRC_ENC>
450
+ : MxInst<(outs SRC:$dst), (ins MEMOp:$src), "move.w\t$src, $dst", []> {
451
+ let Inst = (ascend
452
+ (descend 0b0100011011, SRC_ENC.EA),
453
+ SRC_ENC.Supplement
454
+ );
455
+ }
456
+ } // let Defs = [SR]
457
+
458
+ let mayLoad = 1 in
459
+ foreach AM = MxMoveSupportedAMs in {
460
+ def MOV16s # AM : MxMoveToSR<!cast<MxOpBundle>("MxOp16AddrMode_"#AM).Op,
461
+ !cast<MxEncMemOp>("MxMoveSrcOpEnc_"#AM)>;
462
+ } // foreach AM
463
+
464
+ def MOV16sd : MxMoveToSR<MxOp16AddrMode_d.Op, MxMoveSrcOpEnc_d>;
465
+
466
+ /// Move from SR
467
+ /// --------------------------------------------------
468
+ /// F E D C B A 9 8 7 6 | 5 4 3 | 2 1 0
469
+ /// --------------------------------------------------
470
+ /// | EFFECTIVE ADDRESS
471
+ /// 0 1 0 0 0 0 0 0 1 1 | MODE | REG
472
+ /// --------------------------------------------------
473
+ let Uses = [SR] in {
474
+ class MxMoveFromSR_R
475
+ : MxInst<(outs MxDRD16:$dst), (ins SRC:$src), "move.w\t$src, $dst", []>,
476
+ Requires<[ AtLeastM68010 ]> {
477
+ let Inst = (descend 0b0100000011, MxEncAddrMode_d<"dst">.EA);
478
+ }
479
+
480
+ class MxMoveFromSR_M<MxOperand MEMOp, MxEncMemOp DST_ENC>
481
+ : MxInst<(outs), (ins MEMOp:$dst, SRC:$src), "move.w\t$src, $dst", []>,
482
+ Requires<[ AtLeastM68010 ]> {
483
+ let Inst = (ascend
484
+ (descend 0b0100000011, DST_ENC.EA),
485
+ DST_ENC.Supplement
486
+ );
487
+ }
488
+ } // let Uses = [SR]
489
+
490
+ let mayStore = 1 in
491
+ foreach AM = MxMoveSupportedAMs in {
492
+ def MOV16 # AM # s
493
+ : MxMoveFromSR_M<!cast<MxOpBundle>("MxOp16AddrMode_"#AM).Op,
494
+ !cast<MxEncMemOp>("MxMoveDstOpEnc_"#AM)>;
495
+ } // foreach AM
496
+
497
+ def MOV16ds : MxMoveFromSR_R;
498
+
439
499
//===----------------------------------------------------------------------===//
440
500
// LEA
441
501
//===----------------------------------------------------------------------===//
0 commit comments