|
472 | 472 | (MOVDstore dst (MOVDload src mem) mem))
|
473 | 473 | (Move [16] dst src mem) =>
|
474 | 474 | (STP dst (Select0 <typ.UInt64> (LDP src mem)) (Select1 <typ.UInt64> (LDP src mem)) mem)
|
475 |
| -(Move [32] dst src mem) => |
476 |
| - (STP [16] dst (Select0 <typ.UInt64> (LDP [16] src mem)) (Select1 <typ.UInt64> (LDP [16] src mem)) |
| 475 | + |
| 476 | +(Move [s] dst src mem) && s > 16 && s <= 24 => |
| 477 | + (MOVDstore [int32(s-8)] dst (MOVDload [int32(s-8)] src mem) |
| 478 | + (STP dst (Select0 <typ.UInt64> (LDP src mem)) (Select1 <typ.UInt64> (LDP src mem)) mem)) |
| 479 | +(Move [s] dst src mem) && s > 24 && s <= 32 => |
| 480 | + (STP [int32(s-16)] dst (Select0 <typ.UInt64> (LDP [int32(s-16)] src mem)) (Select1 <typ.UInt64> (LDP [int32(s-16)] src mem)) |
477 | 481 | (STP dst (Select0 <typ.UInt64> (LDP src mem)) (Select1 <typ.UInt64> (LDP src mem)) mem))
|
478 |
| -(Move [48] dst src mem) => |
479 |
| - (STP [32] dst (Select0 <typ.UInt64> (LDP [32] src mem)) (Select1 <typ.UInt64> (LDP [32] src mem)) |
| 482 | +(Move [s] dst src mem) && s > 32 && s <= 40 => |
| 483 | + (MOVDstore [int32(s-8)] dst (MOVDload [int32(s-8)] src mem) |
| 484 | + (STP [16] dst (Select0 <typ.UInt64> (LDP [16] src mem)) (Select1 <typ.UInt64> (LDP [16] src mem)) |
| 485 | + (STP dst (Select0 <typ.UInt64> (LDP src mem)) (Select1 <typ.UInt64> (LDP src mem)) mem))) |
| 486 | +(Move [s] dst src mem) && s > 40 && s <= 48 => |
| 487 | + (STP [int32(s-16)] dst (Select0 <typ.UInt64> (LDP [int32(s-16)] src mem)) (Select1 <typ.UInt64> (LDP [int32(s-16)] src mem)) |
480 | 488 | (STP [16] dst (Select0 <typ.UInt64> (LDP [16] src mem)) (Select1 <typ.UInt64> (LDP [16] src mem))
|
481 | 489 | (STP dst (Select0 <typ.UInt64> (LDP src mem)) (Select1 <typ.UInt64> (LDP src mem)) mem)))
|
482 |
| -(Move [64] dst src mem) => |
483 |
| - (STP [48] dst (Select0 <typ.UInt64> (LDP [48] src mem)) (Select1 <typ.UInt64> (LDP [48] src mem)) |
| 490 | +(Move [s] dst src mem) && s > 48 && s <= 56 => |
| 491 | + (MOVDstore [int32(s-8)] dst (MOVDload [int32(s-8)] src mem) |
| 492 | + (STP [32] dst (Select0 <typ.UInt64> (LDP [32] src mem)) (Select1 <typ.UInt64> (LDP [32] src mem)) |
| 493 | + (STP [16] dst (Select0 <typ.UInt64> (LDP [16] src mem)) (Select1 <typ.UInt64> (LDP [16] src mem)) |
| 494 | + (STP dst (Select0 <typ.UInt64> (LDP src mem)) (Select1 <typ.UInt64> (LDP src mem)) mem)))) |
| 495 | +(Move [s] dst src mem) && s > 56 && s <= 64 => |
| 496 | + (STP [int32(s-16)] dst (Select0 <typ.UInt64> (LDP [int32(s-16)] src mem)) (Select1 <typ.UInt64> (LDP [int32(s-16)] src mem)) |
484 | 497 | (STP [32] dst (Select0 <typ.UInt64> (LDP [32] src mem)) (Select1 <typ.UInt64> (LDP [32] src mem))
|
485 | 498 | (STP [16] dst (Select0 <typ.UInt64> (LDP [16] src mem)) (Select1 <typ.UInt64> (LDP [16] src mem))
|
486 | 499 | (STP dst (Select0 <typ.UInt64> (LDP src mem)) (Select1 <typ.UInt64> (LDP src mem)) mem))))
|
487 | 500 |
|
488 | 501 | // strip off fractional word move
|
489 |
| -(Move [s] dst src mem) && s%16 != 0 && s%16 <= 8 && s > 16 => |
| 502 | +(Move [s] dst src mem) && s%16 != 0 && s%16 <= 8 && s > 64 => |
490 | 503 | (Move [8]
|
491 | 504 | (OffPtr <dst.Type> dst [s-8])
|
492 | 505 | (OffPtr <src.Type> src [s-8])
|
493 | 506 | (Move [s-s%16] dst src mem))
|
494 |
| -(Move [s] dst src mem) && s%16 != 0 && s%16 > 8 && s > 16 => |
| 507 | +(Move [s] dst src mem) && s%16 != 0 && s%16 > 8 && s > 64 => |
495 | 508 | (Move [16]
|
496 | 509 | (OffPtr <dst.Type> dst [s-16])
|
497 | 510 | (OffPtr <src.Type> src [s-16])
|
|
0 commit comments