From a324364f043e462562ef3e0e40459c526ef8bd0c Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 4 Dec 2002 23:45:28 +0000 Subject: [PATCH] Implement initial support for return values from call instructions git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@4924 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/InstSelectSimple.cpp | 14 ++++++++++++++ lib/Target/X86/X86ISelSimple.cpp | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/lib/Target/X86/InstSelectSimple.cpp b/lib/Target/X86/InstSelectSimple.cpp index 55bf65b2f58..2f701ed8d3d 100644 --- a/lib/Target/X86/InstSelectSimple.cpp +++ b/lib/Target/X86/InstSelectSimple.cpp @@ -430,6 +430,20 @@ ISel::visitCallInst (CallInst & CI) // Adjust the stack by `bytesPushed' amount if non-zero if (bytesPushed > 0) BuildMI (BB, X86::ADDri32, 2).addReg(X86::ESP).addZImm(bytesPushed); + + // If there is a return value, scavenge the result from the location the call + // leaves it in... + // + switch (getClass(CI.getType())) { + case cInt: + BuildMI(BB, X86::MOVrr32, 1, getReg(CI)).addReg(X86::EAX); + break; + + default: + std::cerr << "Cannot get return value for call of type '" + << *CI.getType() << "'\n"; + visitInstruction(CI); + } } /// visitSimpleBinary - Implement simple binary operators for integral types... diff --git a/lib/Target/X86/X86ISelSimple.cpp b/lib/Target/X86/X86ISelSimple.cpp index 55bf65b2f58..2f701ed8d3d 100644 --- a/lib/Target/X86/X86ISelSimple.cpp +++ b/lib/Target/X86/X86ISelSimple.cpp @@ -430,6 +430,20 @@ ISel::visitCallInst (CallInst & CI) // Adjust the stack by `bytesPushed' amount if non-zero if (bytesPushed > 0) BuildMI (BB, X86::ADDri32, 2).addReg(X86::ESP).addZImm(bytesPushed); + + // If there is a return value, scavenge the result from the location the call + // leaves it in... + // + switch (getClass(CI.getType())) { + case cInt: + BuildMI(BB, X86::MOVrr32, 1, getReg(CI)).addReg(X86::EAX); + break; + + default: + std::cerr << "Cannot get return value for call of type '" + << *CI.getType() << "'\n"; + visitInstruction(CI); + } } /// visitSimpleBinary - Implement simple binary operators for integral types... -- 2.34.1