mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-10 02:38:50 +00:00
Added the llvm.readport and llvm.writeport intrinsics.
The Verifier ensures that their parameters are of integral types and have the correct sign, but it does not enforce any size restrictions because such restrictions are platform dependent. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@12781 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
60a505b1f6
commit
9570301ee8
@ -227,6 +227,7 @@ unsigned Function::getIntrinsicID() const {
|
||||
break;
|
||||
case 'r':
|
||||
if (getName() == "llvm.returnaddress") return Intrinsic::returnaddress;
|
||||
if (getName() == "llvm.readport") return Intrinsic::readport;
|
||||
break;
|
||||
case 's':
|
||||
if (getName() == "llvm.setjmp") return Intrinsic::setjmp;
|
||||
@ -237,6 +238,8 @@ unsigned Function::getIntrinsicID() const {
|
||||
if (getName() == "llvm.va_copy") return Intrinsic::vacopy;
|
||||
if (getName() == "llvm.va_end") return Intrinsic::vaend;
|
||||
if (getName() == "llvm.va_start") return Intrinsic::vastart;
|
||||
case 'w':
|
||||
if (getName() == "llvm.writeport") return Intrinsic::writeport;
|
||||
break;
|
||||
}
|
||||
// The "llvm." namespace is reserved!
|
||||
|
@ -606,6 +606,26 @@ void Verifier::visitIntrinsicFunctionCall(Intrinsic::ID ID, CallInst &CI) {
|
||||
NumArgs = 1;
|
||||
break;
|
||||
|
||||
// Verify that read and write port have integral parameters of the correct
|
||||
// signed-ness.
|
||||
case Intrinsic::writeport:
|
||||
Assert1(FT->getNumParams() == 2,
|
||||
"Illegal # arguments for intrinsic function!", IF);
|
||||
Assert1(FT->getParamType(0)->isUnsigned(),
|
||||
"First argument not unsigned int!", IF);
|
||||
Assert1(FT->getParamType(1)->isIntegral(),
|
||||
"First argument not unsigned int!", IF);
|
||||
NumArgs = 2;
|
||||
break;
|
||||
|
||||
case Intrinsic::readport:
|
||||
Assert1(FT->getNumParams() == 1,
|
||||
"Illegal # arguments for intrinsic function!", IF);
|
||||
Assert1(FT->getParamType(0)->isUnsigned(),
|
||||
"First argument not unsigned int!", IF);
|
||||
NumArgs = 1;
|
||||
break;
|
||||
|
||||
case Intrinsic::setjmp: NumArgs = 1; break;
|
||||
case Intrinsic::longjmp: NumArgs = 2; break;
|
||||
case Intrinsic::sigsetjmp: NumArgs = 2; break;
|
||||
|
Loading…
x
Reference in New Issue
Block a user