podman

Форк
0
126 строк · 3.1 Кб
1
// Copyright 2019 The Go Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style
3
// license that can be found in the LICENSE file.
4

5
package s390x
6

7
import (
8
	"fmt"
9
)
10

11
// CCMask represents a 4-bit condition code mask. Bits that
12
// are not part of the mask should be 0.
13
//
14
// Condition code masks represent the 4 possible values of
15
// the 2-bit condition code as individual bits. Since IBM Z
16
// is a big-endian platform bits are numbered from left to
17
// right. The lowest value, 0, is represented by 8 (0b1000)
18
// and the highest value, 3, is represented by 1 (0b0001).
19
//
20
// Note that condition code values have different semantics
21
// depending on the instruction that set the condition code.
22
// The names given here assume that the condition code was
23
// set by an integer or floating point comparison. Other
24
// instructions may use these same codes to indicate
25
// different results such as a carry or overflow.
26
type CCMask uint8
27

28
const (
29
	Never CCMask = 0 // no-op
30

31
	// 1-bit masks
32
	Equal     CCMask = 1 << 3
33
	Less      CCMask = 1 << 2
34
	Greater   CCMask = 1 << 1
35
	Unordered CCMask = 1 << 0
36

37
	// 2-bit masks
38
	EqualOrUnordered   CCMask = Equal | Unordered   // not less and not greater
39
	LessOrEqual        CCMask = Less | Equal        // ordered and not greater
40
	LessOrGreater      CCMask = Less | Greater      // ordered and not equal
41
	LessOrUnordered    CCMask = Less | Unordered    // not greater and not equal
42
	GreaterOrEqual     CCMask = Greater | Equal     // ordered and not less
43
	GreaterOrUnordered CCMask = Greater | Unordered // not less and not equal
44

45
	// 3-bit masks
46
	NotEqual     CCMask = Always ^ Equal
47
	NotLess      CCMask = Always ^ Less
48
	NotGreater   CCMask = Always ^ Greater
49
	NotUnordered CCMask = Always ^ Unordered
50

51
	// 4-bit mask
52
	Always CCMask = Equal | Less | Greater | Unordered
53

54
	// useful aliases
55
	Carry    CCMask = GreaterOrUnordered
56
	NoCarry  CCMask = LessOrEqual
57
	Borrow   CCMask = NoCarry
58
	NoBorrow CCMask = Carry
59
)
60

61
// Inverse returns the complement of the condition code mask.
62
func (c CCMask) Inverse() CCMask {
63
	return c ^ Always
64
}
65

66
// ReverseComparison swaps the bits at 0b0100 and 0b0010 in the mask,
67
// reversing the behavior of greater than and less than conditions.
68
func (c CCMask) ReverseComparison() CCMask {
69
	r := c & EqualOrUnordered
70
	if c&Less != 0 {
71
		r |= Greater
72
	}
73
	if c&Greater != 0 {
74
		r |= Less
75
	}
76
	return r
77
}
78

79
func (c CCMask) String() string {
80
	switch c {
81
	// 0-bit mask
82
	case Never:
83
		return "Never"
84

85
	// 1-bit masks
86
	case Equal:
87
		return "Equal"
88
	case Less:
89
		return "Less"
90
	case Greater:
91
		return "Greater"
92
	case Unordered:
93
		return "Unordered"
94

95
	// 2-bit masks
96
	case EqualOrUnordered:
97
		return "EqualOrUnordered"
98
	case LessOrEqual:
99
		return "LessOrEqual"
100
	case LessOrGreater:
101
		return "LessOrGreater"
102
	case LessOrUnordered:
103
		return "LessOrUnordered"
104
	case GreaterOrEqual:
105
		return "GreaterOrEqual"
106
	case GreaterOrUnordered:
107
		return "GreaterOrUnordered"
108

109
	// 3-bit masks
110
	case NotEqual:
111
		return "NotEqual"
112
	case NotLess:
113
		return "NotLess"
114
	case NotGreater:
115
		return "NotGreater"
116
	case NotUnordered:
117
		return "NotUnordered"
118

119
	// 4-bit mask
120
	case Always:
121
		return "Always"
122
	}
123

124
	// invalid
125
	return fmt.Sprintf("Invalid (%#x)", c)
126
}
127

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.