aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Carbonneaux <[email protected]>2017-03-01 11:16:28 -0500
committerQuentin Carbonneaux <[email protected]>2017-03-03 10:52:09 -0500
commit02408ffd8f95a4334212e1d64de987f9192cb4d5 (patch)
tree6107ff5104f77469aba44493db6fdf8db30c24c9
parentc6f8985c23217011df01a73447c98244fb63b20a (diff)
add another idiomatic C test (rega does no good)
-rw-r--r--test/strspn.ssa77
1 files changed, 77 insertions, 0 deletions
diff --git a/test/strspn.ssa b/test/strspn.ssa
new file mode 100644
index 0000000..a64ea19
--- /dev/null
+++ b/test/strspn.ssa
@@ -0,0 +1,77 @@
+# the C strspn function generated by scc
+
+export function w $strspn_(l %s1.81.val,l %s2.82.val)
+{
+ %s1.81 =l alloc8 8
+ %s2.82 =l alloc8 8
+ %n.83 =l alloc4 4
+ %c.84 =l alloc4 4
+ %p.85 =l alloc8 8
+ storel %s1.81.val,%s1.81
+ storel %s2.82.val,%s2.82
+ storew 0,%n.83
+ jmp @.27
+ %.39 =l loadl %s2.82
+ storel %.39,%p.85
+ jmp @.29
+ %.40 =l loadl %p.85
+ %.41 =l add %.40,1
+ storel %.41,%p.85
+ %.43 =l loadl %p.85
+ %.44 =w loadsb %.43
+ %.45 =w extsb %.44
+ %.46 =w cnew %.45,0
+ jnz %.46,@.42,@.36
+ %.47 =l loadl %p.85
+ %.48 =w loadsb %.47
+ %.49 =w extsb %.48
+ %.50 =w loadsw %c.84
+ %.51 =w cnew %.49,%.50
+ jnz %.51,@.30,@.36
+ %.52 =l loadl %p.85
+ %.53 =w loadsb %.52
+ %.54 =w extsb %.53
+ %.55 =w cnew %.54,0
+ jnz %.55,@.33,@.37
+ jmp @.34
+ %.56 =w loaduw %n.83
+ %.57 =w add %.56,1
+ storew %.57,%n.83
+ %.58 =l loadl %s1.81
+ %.59 =l add %.58,1
+ storel %.59,%s1.81
+ %.60 =w loadsb %.58
+ %.61 =w extsb %.60
+ storew %.61,%c.84
+ %.62 =w cnew %.61,0
+ jnz %.62,@.28,@.38
+ %.63 =w loaduw %n.83
+ ret %.63
+}
+
+# >>> driver
+# extern unsigned strspn_(const char *, const char *);
+# int main() {
+# return !(
+# strspn_("", "abc") == 0 &&
+# strspn_("abc", "") == 0 &&
+# strspn_("abc", "bac") == 3 &&
+# strspn_("xabc", "bac") == 0 &&
+# strspn_("axbc", "bca") == 1
+# );
+# }
+# <<<