[PATCH 1/3] MIPS/GCC/test: Implement `-mmicromips' option test

Maciej W. Rozycki macro@imgtec.com
Fri Nov 11 10:37:00 GMT 2016


Add an assembly snippet for `mips_option_tests' to verify that the 
target board can indeed run microMIPS code, support for which is 
optional in the MIPS architecture.

Unlike with the `-mips16' option test for the MIPS16 ASE do not rely on 
a function attribute to switch to the regular MIPS mode first in the 
wrapper arranged by `mips_first_unsupported_option' -- like with the 
`nomips16' attribute used there -- because support for regular MIPS code 
is optional for microMIPS processors.  Consequently microMIPS execution 
may be all that the target board supports and therefore whatever the 
instruction encoding for the target board -- between the regular MIPS 
and the microMIPS sets -- has been selected as the default in board 
options, it has to be respected.  Instead of a function attribute use 
`.set push' and `.set pop' pseudo-ops around `.set micromips' then, 
ensuring the test code is assembled using the microMIPS instruction 
encoding, regardless of what encoding is used for the surrounding code, 
and making sure said surrounding code is consistently assembled.

Use the JRADDIUSP instruction for the actual check as an additional 
safety measure, as this hardware instruction is only present in the 
microMIPS encoding.  The option test otherwise corresponds to the 
`-mips16' one, as the ISA bit has to be similarly set and restored.

	gcc/testsuite/
	* gcc.target/mips/mips.exp (mips_option_tests): Add 
	`-mmicromips' array element.
---
 NB it looks to me like some of the other tests ought to be using `.set 
push' and `.set pop' too, as it's generally unsafe to leave ISA/ASE 
setting overrides behind at the conclusion of an inline asm for the 
assembler to continue using with all the compiler-generated code which 
follows.

 OK to apply?

  Maciej

gcc-mips-test-option-tests-mmicromips.diff
Index: gcc/gcc/testsuite/gcc.target/mips/mips.exp
===================================================================
--- gcc.orig/gcc/testsuite/gcc.target/mips/mips.exp	2016-10-25 05:37:13.000000000 +0100
+++ gcc/gcc/testsuite/gcc.target/mips/mips.exp	2016-11-09 17:23:15.985788415 +0000
@@ -360,6 +360,19 @@ set mips_option_tests(-mips16) {
     jalr $3
     move $31,$2
 }
+set mips_option_tests(-mmicromips) {
+    move $2,$31
+    bal 1f
+    .set push
+    .set micromips
+    jraddiusp 0
+    .set pop
+    .align 2
+1:
+    ori $3,$31,1
+    jalr $3
+    move $31,$2
+}
 set mips_option_tests(-mpaired-single) {
     .set mips64
     lui $2,0x3f80



More information about the Gcc-patches mailing list