From 55d016886cc695aa14dfa3cc8b9e1d602cca149c Mon Sep 17 00:00:00 2001 From: Reed Kotler Date: Wed, 25 Sep 2013 20:58:50 +0000 Subject: [PATCH] Fix a bad typo in the inline assembly code for mips16 pic fp stubs 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 | 6 +++--- test/CodeGen/Mips/hf16call32_body.ll | 24 ++++++++++++------------ test/CodeGen/Mips/hf1_body.ll | 21 +++++++++++++++++++++ 3 files changed, 36 insertions(+), 15 deletions(-) create mode 100644 test/CodeGen/Mips/hf1_body.ll diff --git a/lib/Target/Mips/Mips16HardFloat.cpp b/lib/Target/Mips/Mips16HardFloat.cpp index 14a942490f5..4d728bdfc69 100644 --- a/lib/Target/Mips/Mips16HardFloat.cpp +++ b/lib/Target/Mips/Mips16HardFloat.cpp @@ -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"); diff --git a/test/CodeGen/Mips/hf16call32_body.ll b/test/CodeGen/Mips/hf16call32_body.ll index ca875e2c145..34bae26f85f 100644 --- a/test/CodeGen/Mips/hf16call32_body.ll +++ b/test/CodeGen/Mips/hf16call32_body.ll @@ -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 index 00000000000..b2cce92aa1a --- /dev/null +++ b/test/CodeGen/Mips/hf1_body.ll @@ -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 -- 2.34.1