|
|
1.1 ! root 1: ! 2: /* ASL: test that both C & X flags are set to the last bit shifted out */ ! 3: .global tst_shift_1 ! 4: tst_shift_1: ! 5: movem.l d3-d4,-(sp) ! 6: move.l #0,d1 ! 7: move.l #1,d2 ! 8: move.l #1,d3 ! 9: move.l #0,d4 ! 10: lsr.l d2,d3 /* should set X & C */ ! 11: scc d0 ! 12: asl #1,d1 /* should clear C and X */ ! 13: scs d1 ! 14: addx.l d4,d4 ! 15: tst.l d4 ! 16: sne d4 ! 17: or.b d1,d0 ! 18: or.b d4,d0 ! 19: movem.l (sp)+,d3-d4 ! 20: rts ! 21: ! 22: /* test that lsl is modulo 64 */ ! 23: .global tst_shift_2 ! 24: tst_shift_2: ! 25: move.l #33,d1 ! 26: move.l #1,d2 ! 27: lsl.l d1,d2 ! 28: sne d0 ! 29: rts ! 30: ! 31: .global tst_shift_3 ! 32: tst_shift_3: ! 33: move.l #65,d1 ! 34: move.l #1,d2 ! 35: lsl.l d1,d2 ! 36: cmp.l #2,d2 ! 37: sne d0 ! 38: rts ! 39: ! 40: /* test that zero shift does not affect X flag */ ! 41: .global tst_shift_4 ! 42: tst_shift_4: ! 43: movem.l d3-d4,-(sp) ! 44: move.l #0,d1 ! 45: move.l #1,d2 ! 46: move.l #1,d3 ! 47: move.l #0,d4 ! 48: lsr.l d2,d3 /* should set X & C */ ! 49: scc d0 ! 50: lsr.l d1,d4 /* should not affect X & clear C */ ! 51: scs d1 ! 52: addx.l d4,d4 ! 53: cmp.l #1,d4 ! 54: sne d4 ! 55: or.b d1,d0 ! 56: or.b d4,d0 ! 57: movem.l (sp)+,d3-d4 ! 58: rts ! 59: ! 60: /* LSL: test that both C & X flags are set to the last bit shifted out */ ! 61: .global tst_shift_5 ! 62: tst_shift_5: ! 63: movem.l d3-d4,-(sp) ! 64: move.l #0x55555555,d1 ! 65: move.l #0,d2 ! 66: lsl.l #8,d1 ! 67: scc d0 ! 68: addx.l d2,d2 ! 69: tst.l d2 ! 70: seq d2 ! 71: move.l #0,d3 ! 72: lsl.l #1,d1 ! 73: scs d4 ! 74: addx.l d3,d3 ! 75: tst.l d3 ! 76: sne d3 ! 77: cmp.l #0xaaaaaa00,d1 ! 78: sne d1 ! 79: or.b d1,d0 ! 80: or.b d2,d0 ! 81: or.b d3,d0 ! 82: or.b d4,d0 ! 83: movem.l (sp)+,d3-d4 ! 84: rts ! 85: ! 86: /* same as above, for word shifts */ ! 87: .global tst_shift_6 ! 88: tst_shift_6: ! 89: movem.l d3-d4,-(sp) ! 90: move.l #0x55555555,d1 ! 91: move.l #0,d2 ! 92: lsl.w #8,d1 ! 93: scc d0 ! 94: addx.l d2,d2 ! 95: cmp.l #1,d2 ! 96: sne d2 ! 97: move.l #0,d3 ! 98: lsl.w #1,d1 ! 99: scs d4 ! 100: addx.l d3,d3 ! 101: tst.l d3 ! 102: sne d3 ! 103: cmp.l #0x5555aa00,d1 ! 104: sne d1 ! 105: or.b d1,d0 ! 106: or.b d2,d0 ! 107: or.b d3,d0 ! 108: or.b d4,d0 ! 109: movem.l (sp)+,d3-d4 ! 110: rts ! 111: ! 112: /* same as above, for byte shifts */ ! 113: .global tst_shift_7 ! 114: tst_shift_7: ! 115: movem.l d3-d4,-(sp) ! 116: move.l #0x55555555,d1 ! 117: move.l #0,d2 ! 118: lsl.b #8,d1 ! 119: scc d0 ! 120: addx.l d2,d2 ! 121: cmp.l #1,d2 ! 122: sne d2 ! 123: moveq.l #0,d3 ! 124: lsl.b #1,d1 ! 125: scs d4 ! 126: addx.l d3,d3 ! 127: tst.l d3 ! 128: sne d3 ! 129: cmp.l #0x55555500,d1 ! 130: sne d1 ! 131: or.b d1,d0 ! 132: or.b d2,d0 ! 133: or.b d3,d0 ! 134: or.b d4,d0 ! 135: movem.l (sp)+,d3-d4 ! 136: rts ! 137: ! 138: /* ROL: test that C is set to the last bit shifted out & that X is unaffected */ ! 139: .global tst_shift_8 ! 140: tst_shift_8: ! 141: movem.l d3-d5,-(sp) ! 142: moveq.l #0,d5 ! 143: move.l #0x80000000,d0 ! 144: add.l d0,d0 /* should set X, C and V, and clear d0 */ ! 145: scc d1 ! 146: svc d2 ! 147: rol #1,d0 /* should clear C and V, and leave X unaffected */ ! 148: scs d3 ! 149: svs d4 ! 150: addx.l d5,d5 ! 151: cmp.l #1,d5 ! 152: sne d0 ! 153: or.b d1,d0 ! 154: or.b d2,d0 ! 155: or.b d3,d0 ! 156: or.b d4,d0 ! 157: movem.l (sp)+,d3-d5 ! 158: rts
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.