Skip to content

Commit 8514d41

Browse files
committed
llvm: mirror assertions for bitshift ops
1 parent cd22917 commit 8514d41

2 files changed

Lines changed: 10 additions & 4 deletions

File tree

llvm-backend/src/main/kotlin/io/github/tmarsteel/emerge/backend/llvm/dsl/BasicBlockBuilder.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,16 +333,22 @@ private open class BasicBlockBuilderImpl<C : LlvmContext, R : LlvmType>(
333333
}
334334

335335
override fun <T : LlvmIntegerType> shl(value: LlvmValue<T>, shiftAmount: LlvmValue<T>): LlvmValue<T> {
336+
assert(value.type == shiftAmount.type)
337+
336338
val shiftInstr = Llvm.LLVMBuildShl(llvmRef, value.raw, shiftAmount.raw, tmpVars.next())
337339
return LlvmValue(shiftInstr, value.type)
338340
}
339341

340342
override fun <T : LlvmIntegerType> lshr(value: LlvmValue<T>, shiftAmount: LlvmValue<T>): LlvmValue<T> {
343+
assert(value.type == shiftAmount.type)
344+
341345
val shiftInstr = Llvm.LLVMBuildLShr(llvmRef, value.raw, shiftAmount.raw, tmpVars.next())
342346
return LlvmValue(shiftInstr, value.type)
343347
}
344348

345349
override fun <T : LlvmIntegerType> ashr(value: LlvmValue<T>, shiftAmount: LlvmValue<T>): LlvmValue<T> {
350+
assert(value.type == shiftAmount.type)
351+
346352
val shiftInstr = Llvm.LLVMBuildAShr(llvmRef, value.raw, shiftAmount.raw, tmpVars.next())
347353
return LlvmValue(shiftInstr, value.type)
348354
}

llvm-backend/src/main/kotlin/io/github/tmarsteel/emerge/backend/llvm/intrinsics/exception.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -240,12 +240,12 @@ internal val writeMemoryAddress = KotlinLlvmFunction.define<EmergeLlvmContext, L
240240

241241
val nibbleCharsGlobal = context.constantString("0123456789abcdef")
242242

243-
IntProgression.fromClosedRange(
244-
rangeStart = EmergeUWordType.getNBitsInContext(context).toInt() - 4,
245-
rangeEnd = 0,
243+
UIntProgression.fromClosedRange(
244+
rangeStart = EmergeUWordType.getNBitsInContext(context).toUInt() - 4u,
245+
rangeEnd = 0u,
246246
step = -4
247247
).forEach { shrAmount ->
248-
val nibble = and(lshr(address, context.s32(shrAmount)), context.uWord(0b1111u))
248+
val nibble = and(lshr(address, context.uWord(shrAmount)), context.uWord(0b1111u))
249249
writer(
250250
getelementptr(nibbleCharsGlobal).index(nibble).get(),
251251
context.uWord(1u),

0 commit comments

Comments
 (0)