summaryrefslogtreecommitdiffstats
path: root/test/codegen/switch.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--test/codegen/switch.go101
1 files changed, 101 insertions, 0 deletions
diff --git a/test/codegen/switch.go b/test/codegen/switch.go
new file mode 100644
index 0000000..603e0be
--- /dev/null
+++ b/test/codegen/switch.go
@@ -0,0 +1,101 @@
+// asmcheck
+
+// 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.
+
+// These tests check code generation of switch statements.
+
+package codegen
+
+// see issue 33934
+func f(x string) int {
+ // amd64:-`cmpstring`
+ switch x {
+ case "":
+ return -1
+ case "1", "2", "3":
+ return -2
+ default:
+ return -3
+ }
+}
+
+// use jump tables for 8+ int cases
+func square(x int) int {
+ // amd64:`JMP\s\(.*\)\(.*\)$`
+ // arm64:`MOVD\s\(R.*\)\(R.*<<3\)`,`JMP\s\(R.*\)$`
+ switch x {
+ case 1:
+ return 1
+ case 2:
+ return 4
+ case 3:
+ return 9
+ case 4:
+ return 16
+ case 5:
+ return 25
+ case 6:
+ return 36
+ case 7:
+ return 49
+ case 8:
+ return 64
+ default:
+ return x * x
+ }
+}
+
+// use jump tables for 8+ string lengths
+func length(x string) int {
+ // amd64:`JMP\s\(.*\)\(.*\)$`
+ // arm64:`MOVD\s\(R.*\)\(R.*<<3\)`,`JMP\s\(R.*\)$`
+ switch x {
+ case "a":
+ return 1
+ case "bb":
+ return 2
+ case "ccc":
+ return 3
+ case "dddd":
+ return 4
+ case "eeeee":
+ return 5
+ case "ffffff":
+ return 6
+ case "ggggggg":
+ return 7
+ case "hhhhhhhh":
+ return 8
+ default:
+ return len(x)
+ }
+}
+
+// Use single-byte ordered comparisons for binary searching strings.
+// See issue 53333.
+func mimetype(ext string) string {
+ // amd64: `CMPB\s1\(.*\), \$104$`,-`cmpstring`
+ // arm64: `MOVB\s1\(R.*\), R.*$`, `CMPW\s\$104, R.*$`, -`cmpstring`
+ switch ext {
+ // amd64: `CMPL\s\(.*\), \$1836345390$`
+ // arm64: `MOVD\s\$1836345390`, `CMPW\sR.*, R.*$`
+ case ".htm":
+ return "A"
+ // amd64: `CMPL\s\(.*\), \$1953457454$`
+ // arm64: `MOVD\s\$1953457454`, `CMPW\sR.*, R.*$`
+ case ".eot":
+ return "B"
+ // amd64: `CMPL\s\(.*\), \$1735815982$`
+ // arm64: `MOVD\s\$1735815982`, `CMPW\sR.*, R.*$`
+ case ".svg":
+ return "C"
+ // amd64: `CMPL\s\(.*\), \$1718907950$`
+ // arm64: `MOVD\s\$1718907950`, `CMPW\sR.*, R.*$`
+ case ".ttf":
+ return "D"
+ default:
+ return ""
+ }
+}