github.com/jflude/taocp@v0.0.0-20240210234939-99f2a91af3c2/mix/shift.go (about) 1 package mix 2 3 func (c *Computer) sla(aa Word, i, f, op, m int) (int64, error) { 4 if m < 0 { 5 panic(ErrInvalidOp) 6 } 7 switch f { 8 case 0: // SLA 9 var w Word 10 ShiftBitsLeft(&c.Reg[A], &w, 6*m) 11 case 1: // SRA 12 var w Word 13 ShiftBitsRight(&c.Reg[A], &w, 6*m) 14 case 2: // SLAX 15 ShiftBitsLeft(&c.Reg[A], &c.Reg[X], 6*m) 16 case 3: // SRAX 17 ShiftBitsRight(&c.Reg[A], &c.Reg[X], 6*m) 18 case 4: // SLC 19 RotateBitsLeft(&c.Reg[A], &c.Reg[X], 6*m) 20 case 5: // SRC 21 RotateBitsRight(&c.Reg[A], &c.Reg[X], 6*m) 22 case 6: // SLB (see Section 4.5.2) 23 ShiftBitsLeft(&c.Reg[A], &c.Reg[X], m) 24 case 7: // SRB (see Section 4.5.2) 25 ShiftBitsRight(&c.Reg[A], &c.Reg[X], m) 26 default: 27 panic(ErrInvalidOp) 28 } 29 return 2, nil 30 }