Add binops for more fundamental type kinds
This commit is contained in:
parent
01434b8097
commit
cdff4cc9db
@ -82,6 +82,8 @@ namespace types {
|
|||||||
llvm::Value* FundamentalType::add(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) {
|
llvm::Value* FundamentalType::add(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) {
|
||||||
switch (this->m_ty) {
|
switch (this->m_ty) {
|
||||||
case FundamentalTypeKind::Int:
|
case FundamentalTypeKind::Int:
|
||||||
|
case FundamentalTypeKind::Bool:
|
||||||
|
case FundamentalTypeKind::Char:
|
||||||
return builder.builder->CreateAdd(lhs, rhs, "add");
|
return builder.builder->CreateAdd(lhs, rhs, "add");
|
||||||
default:
|
default:
|
||||||
throw std::runtime_error("Invalid type for add");
|
throw std::runtime_error("Invalid type for add");
|
||||||
@ -91,6 +93,8 @@ namespace types {
|
|||||||
llvm::Value* FundamentalType::sub(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) {
|
llvm::Value* FundamentalType::sub(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) {
|
||||||
switch (this->m_ty) {
|
switch (this->m_ty) {
|
||||||
case FundamentalTypeKind::Int:
|
case FundamentalTypeKind::Int:
|
||||||
|
case FundamentalTypeKind::Bool:
|
||||||
|
case FundamentalTypeKind::Char:
|
||||||
return builder.builder->CreateSub(lhs, rhs, "sub");
|
return builder.builder->CreateSub(lhs, rhs, "sub");
|
||||||
default:
|
default:
|
||||||
throw std::runtime_error("Invalid type");
|
throw std::runtime_error("Invalid type");
|
||||||
@ -100,6 +104,8 @@ namespace types {
|
|||||||
llvm::Value* FundamentalType::lt(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) {
|
llvm::Value* FundamentalType::lt(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) {
|
||||||
switch (this->m_ty) {
|
switch (this->m_ty) {
|
||||||
case FundamentalTypeKind::Int:
|
case FundamentalTypeKind::Int:
|
||||||
|
case FundamentalTypeKind::Bool:
|
||||||
|
case FundamentalTypeKind::Char:
|
||||||
return builder.builder->CreateCmp(llvm::CmpInst::Predicate::ICMP_SLT, lhs, rhs, "cmp");
|
return builder.builder->CreateCmp(llvm::CmpInst::Predicate::ICMP_SLT, lhs, rhs, "cmp");
|
||||||
default:
|
default:
|
||||||
throw std::runtime_error("Invalid type");
|
throw std::runtime_error("Invalid type");
|
||||||
@ -109,6 +115,8 @@ namespace types {
|
|||||||
llvm::Value* FundamentalType::gt(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) {
|
llvm::Value* FundamentalType::gt(codegen::Builder& builder, llvm::Value* lhs, llvm::Value* rhs) {
|
||||||
switch (this->m_ty) {
|
switch (this->m_ty) {
|
||||||
case FundamentalTypeKind::Int:
|
case FundamentalTypeKind::Int:
|
||||||
|
case FundamentalTypeKind::Bool:
|
||||||
|
case FundamentalTypeKind::Char:
|
||||||
return builder.builder->CreateCmp(llvm::CmpInst::Predicate::ICMP_SGT, lhs, rhs);
|
return builder.builder->CreateCmp(llvm::CmpInst::Predicate::ICMP_SGT, lhs, rhs);
|
||||||
default:
|
default:
|
||||||
throw std::runtime_error("Invalid type");
|
throw std::runtime_error("Invalid type");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user