strspn.ssa 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. # the C strspn function generated by scc
  2. export function w $strspn_(l %s1.81.val,l %s2.82.val)
  3. {
  4. @.64
  5. %s1.81 =l alloc8 8
  6. %s2.82 =l alloc8 8
  7. %n.83 =l alloc4 4
  8. %c.84 =l alloc4 4
  9. %p.85 =l alloc8 8
  10. storel %s1.81.val,%s1.81
  11. storel %s2.82.val,%s2.82
  12. storew 0,%n.83
  13. jmp @.27
  14. @.28
  15. %.39 =l loadl %s2.82
  16. storel %.39,%p.85
  17. jmp @.29
  18. @.30
  19. @.31
  20. %.40 =l loadl %p.85
  21. %.41 =l add %.40,1
  22. storel %.41,%p.85
  23. @.29
  24. %.43 =l loadl %p.85
  25. %.44 =w loadsb %.43
  26. %.45 =w extsb %.44
  27. %.46 =w cnew %.45,0
  28. jnz %.46,@.42,@.36
  29. @.42
  30. %.47 =l loadl %p.85
  31. %.48 =w loadsb %.47
  32. %.49 =w extsb %.48
  33. %.50 =w loadsw %c.84
  34. %.51 =w cnew %.49,%.50
  35. jnz %.51,@.30,@.36
  36. @.36
  37. @.32
  38. %.52 =l loadl %p.85
  39. %.53 =w loadsb %.52
  40. %.54 =w extsb %.53
  41. %.55 =w cnew %.54,0
  42. jnz %.55,@.33,@.37
  43. @.37
  44. jmp @.34
  45. @.33
  46. @.35
  47. %.56 =w loaduw %n.83
  48. %.57 =w add %.56,1
  49. storew %.57,%n.83
  50. @.27
  51. %.58 =l loadl %s1.81
  52. %.59 =l add %.58,1
  53. storel %.59,%s1.81
  54. %.60 =w loadsb %.58
  55. %.61 =w extsb %.60
  56. storew %.61,%c.84
  57. %.62 =w cnew %.61,0
  58. jnz %.62,@.28,@.38
  59. @.38
  60. @.34
  61. %.63 =w loaduw %n.83
  62. ret %.63
  63. }
  64. # >>> driver
  65. # extern unsigned strspn_(const char *, const char *);
  66. # int main() {
  67. # return !(
  68. # strspn_("", "abc") == 0 &&
  69. # strspn_("abc", "") == 0 &&
  70. # strspn_("abc", "bac") == 3 &&
  71. # strspn_("xabc", "bac") == 0 &&
  72. # strspn_("axbc", "bca") == 1
  73. # );
  74. # }
  75. # <<<