Fix a bad typo in the inline assembly code for mips16 pic fp stubs
authorReed Kotler <rkotler@mips.com>
Wed, 25 Sep 2013 20:58:50 +0000 (20:58 +0000)
committerReed Kotler <rkotler@mips.com>
Wed, 25 Sep 2013 20:58:50 +0000 (20:58 +0000)
and make one cosmetic cleanup to make it look the same as gcc
in this area; adjusting test cases.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@191400 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Mips/Mips16HardFloat.cpp
test/CodeGen/Mips/hf16call32_body.ll
test/CodeGen/Mips/hf1_body.ll [new file with mode: 0644]

index 14a942490f5ee7a49708bd6c7a4c7d1c6c86f119..4d728bdfc697d2d41efbdeaa74796eeb3ee10c5f 100644 (file)
@@ -421,7 +421,7 @@ static void createFPFnStub(Function *F, Module *M, FPParamVariant PV,
   std::string Name = F->getName();
   std::string SectionName = ".mips16.fn." + Name;
   std::string StubName = "__fn_stub_" + Name;
-  std::string LocalName = "__fn_local_" + Name;
+  std::string LocalName = "$$__fn_local_" + Name;
   Function *FStub = Function::Create
     (F->getFunctionType(),
      Function::InternalLinkage, StubName, M);
@@ -436,14 +436,14 @@ static void createFPFnStub(Function *F, Module *M, FPParamVariant PV,
   IAH.Out(" .set  macro");
   if (PicMode) {
     IAH.Out(".set noreorder");
-    IAH.Out(".cpload  $$2");
+    IAH.Out(".cpload  $$25");
     IAH.Out(".set reorder");
     IAH.Out(".reloc 0,R_MIPS_NONE," + Name);
     IAH.Out("la $$25," + LocalName);
   }
   else {
     IAH.Out(".set reorder");
-    IAH.Out("la $$25, " + Name);
+    IAH.Out("la $$25," + Name);
   }
   swapFPIntParams(PV, M, IAH, LE, false);
   IAH.Out("jr $$25");
index ca875e2c1451b48d4e39cff38643ae681ed61d88..34bae26f85f3a160eaf7c4c8cbb7038a88d4818e 100644 (file)
@@ -20,7 +20,7 @@ entry:
 }
 ; stel: .section       .mips16.fn.v_sf,"ax",@progbits
 ; stel:        .ent    __fn_stub_v_sf
-; stel:                la $25, v_sf
+; stel:                la $25,v_sf
 ; stel:                mfc1 $4,$f12
 ; stel:                jr $25
 ; stel:                __fn_local_v_sf = v_sf
@@ -40,7 +40,7 @@ entry:
 
 ; stel: .section       .mips16.fn.v_df,"ax",@progbits
 ; stel:        .ent    __fn_stub_v_df
-; stel:                la $25, v_df
+; stel:                la $25,v_df
 ; stel:                mfc1 $4,$f12
 ; stel:                mfc1 $5,$f13
 ; stel:                jr $25
@@ -63,7 +63,7 @@ entry:
 
 ; stel: .section       .mips16.fn.v_sf_sf,"ax",@progbits
 ; stel:        .ent    __fn_stub_v_sf_sf
-; stel:                la $25, v_sf_sf
+; stel:                la $25,v_sf_sf
 ; stel:                mfc1 $4,$f12
 ; stel:                mfc1 $5,$f14
 ; stel:                jr $25
@@ -86,7 +86,7 @@ entry:
 
 ; stel: .section       .mips16.fn.v_sf_df,"ax",@progbits
 ; stel:        .ent    __fn_stub_v_sf_df
-; stel:                la $25, v_sf_df
+; stel:                la $25,v_sf_df
 ; stel:                mfc1 $4,$f12
 ; stel:                mfc1 $6,$f14
 ; stel:                mfc1 $7,$f15
@@ -110,7 +110,7 @@ entry:
 
 ; stel: .section       .mips16.fn.v_df_sf,"ax",@progbits
 ; stel:        .ent    __fn_stub_v_df_sf
-; stel:                la $25, v_df_sf
+; stel:                la $25,v_df_sf
 ; stel:                mfc1 $4,$f12
 ; stel:                mfc1 $5,$f13
 ; stel:                mfc1 $6,$f14
@@ -134,7 +134,7 @@ entry:
 
 ; stel: .section       .mips16.fn.v_df_df,"ax",@progbits
 ; stel:        .ent    __fn_stub_v_df_df
-; stel:                la $25, v_df_df
+; stel:                la $25,v_df_df
 ; stel:                mfc1 $4,$f12
 ; stel:                mfc1 $5,$f13
 ; stel:                mfc1 $6,$f14
@@ -164,7 +164,7 @@ entry:
 
 ; stel: .section       .mips16.fn.sf_sf,"ax",@progbits
 ; stel:        .ent    __fn_stub_sf_sf
-; stel:                la $25, sf_sf
+; stel:                la $25,sf_sf
 ; stel:                mfc1 $4,$f12
 ; stel:                jr $25
 ; stel:                __fn_local_sf_sf = sf_sf
@@ -184,7 +184,7 @@ entry:
 
 ; stel: .section       .mips16.fn.sf_df,"ax",@progbits
 ; stel:        .ent    __fn_stub_sf_df
-; stel:                la $25, sf_df
+; stel:                la $25,sf_df
 ; stel:                mfc1 $4,$f12
 ; stel:                mfc1 $5,$f13
 ; stel:                jr $25
@@ -208,7 +208,7 @@ entry:
 
 ; stel: .section       .mips16.fn.sf_sf_sf,"ax",@progbits
 ; stel:        .ent    __fn_stub_sf_sf_sf
-; stel:                la $25, sf_sf_sf
+; stel:                la $25,sf_sf_sf
 ; stel:                mfc1 $4,$f12
 ; stel:                mfc1 $5,$f14
 ; stel:                jr $25
@@ -232,7 +232,7 @@ entry:
 
 ; stel: .section       .mips16.fn.sf_sf_df,"ax",@progbits
 ; stel:        .ent    __fn_stub_sf_sf_df
-; stel:                la $25, sf_sf_df
+; stel:                la $25,sf_sf_df
 ; stel:                mfc1 $4,$f12
 ; stel:                mfc1 $6,$f14
 ; stel:                mfc1 $7,$f15
@@ -257,7 +257,7 @@ entry:
 
 ; stel: .section       .mips16.fn.sf_df_sf,"ax",@progbits
 ; stel:        .ent    __fn_stub_sf_df_sf
-; stel:                la $25, sf_df_sf
+; stel:                la $25,sf_df_sf
 ; stel:                mfc1 $4,$f12
 ; stel:                mfc1 $5,$f13
 ; stel:                mfc1 $6,$f14
@@ -282,7 +282,7 @@ entry:
 
 ; stel: .section       .mips16.fn.sf_df_df,"ax",@progbits
 ; stel:        .ent    __fn_stub_sf_df_df
-; stel:                la $25, sf_df_df
+; stel:                la $25,sf_df_df
 ; stel:                mfc1 $4,$f12
 ; stel:                mfc1 $5,$f13
 ; stel:                mfc1 $6,$f14
diff --git a/test/CodeGen/Mips/hf1_body.ll b/test/CodeGen/Mips/hf1_body.ll
new file mode 100644 (file)
index 0000000..b2cce92
--- /dev/null
@@ -0,0 +1,21 @@
+; RUN: llc  -mtriple=mipsel-linux-gnu -march=mipsel -mcpu=mips16  -relocation-model=pic -soft-float -mips16-hard-float < %s | FileCheck %s -check-prefix=picfp16
+
+@x = external global float
+
+; Function Attrs: nounwind
+define void @v_sf(float %p) #0 {
+entry:
+  %p.addr = alloca float, align 4
+  store float %p, float* %p.addr, align 4
+  %0 = load float* %p.addr, align 4
+  store float %0, float* @x, align 4
+  ret void
+}
+; picfp16:     .ent    __fn_stub_v_sf
+; picfp16:     .cpload  $25
+; picfp16:     .set reorder
+; picfp16:     .reloc 0,R_MIPS_NONE,v_sf
+; picfp16:     la $25,$__fn_local_v_sf
+; picfp16:     mfc1 $4,$f12
+; picfp16:     jr $25
+; picfp16:     .end    __fn_stub_v_sf