1// asmcheck 2 3// Copyright 2019 The Go Authors. All rights reserved. 4// Use of this source code is governed by a BSD-style 5// license that can be found in the LICENSE file. 6 7package codegen 8 9// Notes: 10// - these examples use channels to provide a source of 11// unknown values that cannot be optimized away 12// - these examples use for loops to force branches 13// backward (predicted taken) 14 15// ---------------------------------- // 16// signed integer range (conjunction) // 17// ---------------------------------- // 18 19func si1c(c <-chan int64) { 20 // amd64:"CMPQ\t.+, [$]256" 21 // s390x:"CLGIJ\t[$]12, R[0-9]+, [$]255" 22 for x := <-c; x >= 0 && x < 256; x = <-c { 23 } 24} 25 26func si2c(c <-chan int32) { 27 // amd64:"CMPL\t.+, [$]256" 28 // s390x:"CLIJ\t[$]12, R[0-9]+, [$]255" 29 for x := <-c; x >= 0 && x < 256; x = <-c { 30 } 31} 32 33func si3c(c <-chan int16) { 34 // amd64:"CMPW\t.+, [$]256" 35 // s390x:"CLIJ\t[$]12, R[0-9]+, [$]255" 36 for x := <-c; x >= 0 && x < 256; x = <-c { 37 } 38} 39 40func si4c(c <-chan int8) { 41 // amd64:"CMPB\t.+, [$]10" 42 // s390x:"CLIJ\t[$]4, R[0-9]+, [$]10" 43 for x := <-c; x >= 0 && x < 10; x = <-c { 44 } 45} 46 47func si5c(c <-chan int64) { 48 // amd64:"CMPQ\t.+, [$]251","ADDQ\t[$]-5," 49 // s390x:"CLGIJ\t[$]4, R[0-9]+, [$]251","ADD\t[$]-5," 50 for x := <-c; x < 256 && x > 4; x = <-c { 51 } 52} 53 54func si6c(c <-chan int32) { 55 // amd64:"CMPL\t.+, [$]255","DECL\t" 56 // s390x:"CLIJ\t[$]12, R[0-9]+, [$]255","ADDW\t[$]-1," 57 for x := <-c; x > 0 && x <= 256; x = <-c { 58 } 59} 60 61func si7c(c <-chan int16) { 62 // amd64:"CMPW\t.+, [$]60","ADDL\t[$]10," 63 // s390x:"CLIJ\t[$]12, R[0-9]+, [$]60","ADDW\t[$]10," 64 for x := <-c; x >= -10 && x <= 50; x = <-c { 65 } 66} 67 68func si8c(c <-chan int8) { 69 // amd64:"CMPB\t.+, [$]126","ADDL\t[$]126," 70 // s390x:"CLIJ\t[$]4, R[0-9]+, [$]126","ADDW\t[$]126," 71 for x := <-c; x >= -126 && x < 0; x = <-c { 72 } 73} 74 75// ---------------------------------- // 76// signed integer range (disjunction) // 77// ---------------------------------- // 78 79func si1d(c <-chan int64) { 80 // amd64:"CMPQ\t.+, [$]256" 81 // s390x:"CLGIJ\t[$]2, R[0-9]+, [$]255" 82 for x := <-c; x < 0 || x >= 256; x = <-c { 83 } 84} 85 86func si2d(c <-chan int32) { 87 // amd64:"CMPL\t.+, [$]256" 88 // s390x:"CLIJ\t[$]2, R[0-9]+, [$]255" 89 for x := <-c; x < 0 || x >= 256; x = <-c { 90 } 91} 92 93func si3d(c <-chan int16) { 94 // amd64:"CMPW\t.+, [$]256" 95 // s390x:"CLIJ\t[$]2, R[0-9]+, [$]255" 96 for x := <-c; x < 0 || x >= 256; x = <-c { 97 } 98} 99 100func si4d(c <-chan int8) { 101 // amd64:"CMPB\t.+, [$]10" 102 // s390x:"CLIJ\t[$]10, R[0-9]+, [$]10" 103 for x := <-c; x < 0 || x >= 10; x = <-c { 104 } 105} 106 107func si5d(c <-chan int64) { 108 // amd64:"CMPQ\t.+, [$]251","ADDQ\t[$]-5," 109 // s390x:"CLGIJ\t[$]10, R[0-9]+, [$]251","ADD\t[$]-5," 110 for x := <-c; x >= 256 || x <= 4; x = <-c { 111 } 112} 113 114func si6d(c <-chan int32) { 115 // amd64:"CMPL\t.+, [$]255","DECL\t" 116 // s390x:"CLIJ\t[$]2, R[0-9]+, [$]255","ADDW\t[$]-1," 117 for x := <-c; x <= 0 || x > 256; x = <-c { 118 } 119} 120 121func si7d(c <-chan int16) { 122 // amd64:"CMPW\t.+, [$]60","ADDL\t[$]10," 123 // s390x:"CLIJ\t[$]2, R[0-9]+, [$]60","ADDW\t[$]10," 124 for x := <-c; x < -10 || x > 50; x = <-c { 125 } 126} 127 128func si8d(c <-chan int8) { 129 // amd64:"CMPB\t.+, [$]126","ADDL\t[$]126," 130 // s390x:"CLIJ\t[$]10, R[0-9]+, [$]126","ADDW\t[$]126," 131 for x := <-c; x < -126 || x >= 0; x = <-c { 132 } 133} 134 135// ------------------------------------ // 136// unsigned integer range (conjunction) // 137// ------------------------------------ // 138 139func ui1c(c <-chan uint64) { 140 // amd64:"CMPQ\t.+, [$]251","ADDQ\t[$]-5," 141 // s390x:"CLGIJ\t[$]4, R[0-9]+, [$]251","ADD\t[$]-5," 142 for x := <-c; x < 256 && x > 4; x = <-c { 143 } 144} 145 146func ui2c(c <-chan uint32) { 147 // amd64:"CMPL\t.+, [$]255","DECL\t" 148 // s390x:"CLIJ\t[$]12, R[0-9]+, [$]255","ADDW\t[$]-1," 149 for x := <-c; x > 0 && x <= 256; x = <-c { 150 } 151} 152 153func ui3c(c <-chan uint16) { 154 // amd64:"CMPW\t.+, [$]40","ADDL\t[$]-10," 155 // s390x:"CLIJ\t[$]12, R[0-9]+, [$]40","ADDW\t[$]-10," 156 for x := <-c; x >= 10 && x <= 50; x = <-c { 157 } 158} 159 160func ui4c(c <-chan uint8) { 161 // amd64:"CMPB\t.+, [$]2","ADDL\t[$]-126," 162 // s390x:"CLIJ\t[$]4, R[0-9]+, [$]2","ADDW\t[$]-126," 163 for x := <-c; x >= 126 && x < 128; x = <-c { 164 } 165} 166 167// ------------------------------------ // 168// unsigned integer range (disjunction) // 169// ------------------------------------ // 170 171func ui1d(c <-chan uint64) { 172 // amd64:"CMPQ\t.+, [$]251","ADDQ\t[$]-5," 173 // s390x:"CLGIJ\t[$]10, R[0-9]+, [$]251","ADD\t[$]-5," 174 for x := <-c; x >= 256 || x <= 4; x = <-c { 175 } 176} 177 178func ui2d(c <-chan uint32) { 179 // amd64:"CMPL\t.+, [$]254","ADDL\t[$]-2," 180 // s390x:"CLIJ\t[$]2, R[0-9]+, [$]254","ADDW\t[$]-2," 181 for x := <-c; x <= 1 || x > 256; x = <-c { 182 } 183} 184 185func ui3d(c <-chan uint16) { 186 // amd64:"CMPW\t.+, [$]40","ADDL\t[$]-10," 187 // s390x:"CLIJ\t[$]2, R[0-9]+, [$]40","ADDW\t[$]-10," 188 for x := <-c; x < 10 || x > 50; x = <-c { 189 } 190} 191 192func ui4d(c <-chan uint8) { 193 // amd64:"CMPB\t.+, [$]2","ADDL\t[$]-126," 194 // s390x:"CLIJ\t[$]10, R[0-9]+, [$]2","ADDW\t[$]-126," 195 for x := <-c; x < 126 || x >= 128; x = <-c { 196 } 197} 198