You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

strcmp.S 2.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*
  2. * Derived from the Hyperstone's library source code.
  3. * Modefied src in order to apply the -mgnu-param compiler option.
  4. * Copyright (C) 2002-2003 GDT, Yannis Mitsos <gmitsos@telecom.ntua.gr>
  5. * George Thanos <gthanos@telecom.ntua.gr>
  6. */
  7. .text
  8. .align 2
  9. .global _strcmp
  10. ;ENTRY(_strcmp)
  11. _strcmp:
  12. FRAME L8,L2
  13. CMPBI L1, 3 # check for word alignment
  14. BNZ str_except
  15. CMPBI L0, 3 # check for word alignment
  16. BNZ str_except
  17. start:
  18. LDD.P L1, L4 # post inc mode
  19. LDD.P L0, L6 # post inc mode
  20. CMPBI L4, ANYBZ
  21. BE correct1
  22. CMP L4, L6
  23. BNE correct1
  24. CMP L5, L7
  25. BNE correct
  26. CMPBI L5, ANYBZ
  27. BE correct
  28. CMPBI L6, ANYBZ
  29. BE correct1
  30. CMPBI L7, ANYBZ
  31. BNE start
  32. correct: MASK L4, L5, 0xff000000
  33. MASK L6, L7, 0xff000000
  34. CMP L4, L6
  35. BNE Exit
  36. SHLI L5, 8
  37. CMPI L4, 0
  38. DBNE correct
  39. SHLI L7, 8
  40. MOV L1, L4
  41. RET PC, L2
  42. Exit: SUB L4, L6 # Subtract chars
  43. SARI L4, 24
  44. MOV L1, L4
  45. RET PC, L2
  46. correct1: MASK L5, L4, 0xff000000
  47. MASK L7, L6, 0xff000000
  48. CMP L5, L7
  49. BNE Exit1
  50. SHLI L4, 8
  51. CMPI L5, 0
  52. DBNE correct1
  53. SHLI L6, 8
  54. MOV L1, L5
  55. RET PC, L2
  56. Exit1: SUB L5, L7 # Subtract chars
  57. SARI L5, 24
  58. MOV L1, L5
  59. RET PC, L2
  60. testzero: CMPI L4, 0
  61. BE L_5
  62. str_except:
  63. LDBU.N L1, L4, 1 # Load *s1, compare bytes
  64. LDBU.N L0, L5, 1 # Load *s2, compare bytes
  65. CMP L4, L5
  66. BE testzero
  67. SUB L4, L5 # Subtract chars
  68. L_5: MOV L1, L4
  69. RET PC, L2
  70. .END