basic.exp 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. # MIPS simulator instruction tests
  2. sim_init
  3. # Do "run_sim_test TESTFILE MODELS" for each combination of the
  4. # mf{lo,hi} -> mult/div/mt{lo,hi} hazard described in mips.igen.
  5. # Insert NOPS nops after the mflo or mfhi.
  6. proc run_hilo_test {testfile models nops} {
  7. foreach reg {lo hi} {
  8. foreach insn "{mult\t\$4,\$4} {div\t\$0,\$4,\$4} {mt$reg\t\$4}" {
  9. set contents ""
  10. append contents "\t.macro hilo\n"
  11. append contents "\tmf$reg\t\$4\n"
  12. append contents "\t.rept\t$nops\n"
  13. append contents "\tnop\n"
  14. append contents "\t.endr\n"
  15. append contents "\t$insn\n"
  16. append contents "\t.endm"
  17. verbose -log "HILO test:\n$contents"
  18. set file [open hilo-hazard.inc w]
  19. puts $file $contents
  20. close $file
  21. run_sim_test $testfile $models
  22. }
  23. }
  24. }
  25. # Runs micromips tests by adding -mmicromips to as options
  26. proc run_micromips_test { name requested_machs } {
  27. global ASFLAGS_FOR_TARGET
  28. set ASFLAGS_FOR_TARGET "-mmicromips"
  29. run_sim_test $name $requested_machs
  30. unset ASFLAGS_FOR_TARGET
  31. }
  32. # Runs endian tests
  33. proc run_endian_tests { name requested_machs } {
  34. global ASFLAGS_FOR_TARGET
  35. global LDFLAGS_FOR_TARGET
  36. run_sim_test $name $requested_machs
  37. set ASFLAGS_FOR_TARGET "-EL"
  38. set LDFLAGS_FOR_TARGET "-EL"
  39. run_sim_test $name $requested_machs
  40. unset ASFLAGS_FOR_TARGET
  41. unset LDFLAGS_FOR_TARGET
  42. }
  43. # Runs all specified tests
  44. proc run_sim_tests { name requested_machs { requested_micromips_machs "" } } {
  45. run_sim_test $name $requested_machs
  46. run_micromips_test $name $requested_micromips_machs
  47. }
  48. # Runs the combination of instructions removed in R6 through the testsuite
  49. proc run_r6_removed_test {testfile models} {
  50. global subdir srcdir
  51. set fd [open "$srcdir/$subdir/r6-removed.csv" r]
  52. set file_data [read $fd]
  53. close $fd
  54. set data [split $file_data "\n"]
  55. foreach line $data {
  56. set line_contents [split $line ","]
  57. set mnemonic [lindex $line_contents 0]
  58. set insn [lindex $line_contents 1]
  59. if {[string compare $insn ""] == 1} {
  60. set contents ""
  61. append contents ".macro removed_instr\n"
  62. append contents ".word $insn\n"
  63. append contents "nop\n"
  64. append contents ".endm"
  65. verbose -log "r6-removed test: $mnemonic\n$contents"
  66. set file [open r6-removed.inc w]
  67. puts $file $contents
  68. close $file
  69. run_sim_test $testfile $models
  70. }
  71. }
  72. }
  73. if {[istarget *]} {
  74. # Used to locate the `run` program.
  75. global arch
  76. set arch "mips"
  77. set dspmodels ""
  78. set mdmxmodels ""
  79. set micromipsmodels ""
  80. set micromipsdspmodels ""
  81. if {[istarget mipsisa64sb1*-*-elf]} {
  82. set models "sb1"
  83. set submodels "mips1 mips2 mips3 mips4 mips32 mips64"
  84. append mdmxmodels " mips64"
  85. } elseif {[istarget mipsisa64r6*-*-elf]} {
  86. set models "mips32r6 mips64r6"
  87. set submodels ""
  88. } elseif {[istarget mipsisa64*-*-elf]} {
  89. set models "mips32 mips64 mips32r2 mips64r2"
  90. set submodels "mips1 mips2 mips3 mips4"
  91. append dspmodels " mips32r2 mips64r2"
  92. append mdmxmodels " mips64 mips32r2 mips64r2"
  93. } elseif {[istarget mips*-sde-elf*] || [istarget mips*-mti-elf*]} {
  94. set models "mips32 mips64 mips32r2 mips64r2 mips32r6 mips64r6"
  95. set submodels ""
  96. append dspmodels " mips32r2 mips64r2 mips32r6 mips64r6"
  97. append mdmxmodels " mips64 mips32r2 mips64r2 mips32r6 mips64r6"
  98. append micromipsmodels " mips32r2 mips64r2"
  99. append micromipsdspmodels " mips32r2 mips64r2"
  100. } elseif {[istarget mipsisa32r6*-*-elf]} {
  101. set models "mips32r6"
  102. set submodels ""
  103. } elseif {[istarget mipsisa32*-*-elf]} {
  104. set models "mips32 mips32r2"
  105. set submodels "mips1 mips2"
  106. append dspmodels " mips32r2"
  107. append mdmxmodels " mips32r2"
  108. append micromipsmodels " mips32r2"
  109. append micromipsdspmodels " mips32r2"
  110. } elseif {[istarget mips64vr*-*-elf]} {
  111. set models "vr4100 vr4111 vr4120 vr5000 vr5400 vr5500"
  112. set submodels "mips1 mips2 mips3 mips4"
  113. } elseif {[istarget mips64*-*-elf]} {
  114. set models "mips3"
  115. set submodels "mips1 mips2"
  116. } else {
  117. # fall back to just testing mips1 code.
  118. set models "mips1"
  119. set submodels ""
  120. }
  121. append submodels " " $models
  122. set cpu_option -march
  123. run_sim_tests sanity.s $submodels $micromipsmodels
  124. foreach nops {0 1} {
  125. run_hilo_test hilo-hazard-1.s $models $nops
  126. run_hilo_test hilo-hazard-2.s $models $nops
  127. }
  128. run_hilo_test hilo-hazard-3.s $models 2
  129. run_hilo_test hilo-hazard-4.s $micromipsmodels 2
  130. run_sim_test fpu64-ps.s $submodels
  131. run_sim_test fpu64-ps-sb1.s $submodels
  132. run_sim_test mdmx-ob.s $mdmxmodels
  133. run_sim_test mdmx-ob-sb1.s $mdmxmodels
  134. run_sim_tests mips32-dsp.s $dspmodels $micromipsdspmodels
  135. run_sim_tests mips32-dsp2.s $dspmodels $micromipsdspmodels
  136. run_sim_test r2-fpu.s $models
  137. run_sim_test r6-fpu.s $models
  138. run_sim_test r6.s $models
  139. run_sim_test r6-forbidden.s $models
  140. run_r6_removed_test r6-removed.s $models
  141. run_sim_test r6-64.s $models
  142. run_sim_test r6-branch.s $models
  143. run_endian_tests r6-llsc-wp.s $models
  144. run_endian_tests r6-llsc-dp.s $models
  145. }