mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-04 00:22:26 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			47 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			47 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2019 The Go Authors. All rights reserved.
 | 
						|
// Use of this source code is governed by a BSD-style
 | 
						|
// license that can be found in the LICENSE file.
 | 
						|
 | 
						|
package s390x
 | 
						|
 | 
						|
// RotateParams represents the immediates required for a "rotate
 | 
						|
// then ... selected bits instruction".
 | 
						|
//
 | 
						|
// The Start and End values are the indexes that represent
 | 
						|
// the masked region. They are inclusive and are in big-
 | 
						|
// endian order (bit 0 is the MSB, bit 63 is the LSB). They
 | 
						|
// may wrap around.
 | 
						|
//
 | 
						|
// Some examples:
 | 
						|
//
 | 
						|
// Masked region             | Start | End
 | 
						|
// --------------------------+-------+----
 | 
						|
// 0x00_00_00_00_00_00_00_0f | 60    | 63
 | 
						|
// 0xf0_00_00_00_00_00_00_00 | 0     | 3
 | 
						|
// 0xf0_00_00_00_00_00_00_0f | 60    | 3
 | 
						|
//
 | 
						|
// The Amount value represents the amount to rotate the
 | 
						|
// input left by. Note that this rotation is performed
 | 
						|
// before the masked region is used.
 | 
						|
type RotateParams struct {
 | 
						|
	Start  uint8 // big-endian start bit index [0..63]
 | 
						|
	End    uint8 // big-endian end bit index [0..63]
 | 
						|
	Amount uint8 // amount to rotate left
 | 
						|
}
 | 
						|
 | 
						|
func NewRotateParams(start, end, amount int64) RotateParams {
 | 
						|
	if start&^63 != 0 {
 | 
						|
		panic("start out of bounds")
 | 
						|
	}
 | 
						|
	if end&^63 != 0 {
 | 
						|
		panic("end out of bounds")
 | 
						|
	}
 | 
						|
	if amount&^63 != 0 {
 | 
						|
		panic("amount out of bounds")
 | 
						|
	}
 | 
						|
	return RotateParams{
 | 
						|
		Start:  uint8(start),
 | 
						|
		End:    uint8(end),
 | 
						|
		Amount: uint8(amount),
 | 
						|
	}
 | 
						|
}
 |