[K/N] Implement isExperimentalMM intrinsic
This commit is contained in:
+6
@@ -2,6 +2,7 @@ package org.jetbrains.kotlin.backend.konan.llvm
|
||||
|
||||
import kotlinx.cinterop.cValuesOf
|
||||
import llvm.*
|
||||
import org.jetbrains.kotlin.backend.konan.MemoryModel
|
||||
import org.jetbrains.kotlin.backend.konan.RuntimeNames
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.getAnnotationStringValue
|
||||
import org.jetbrains.kotlin.backend.konan.descriptors.isTypedIntrinsic
|
||||
@@ -63,6 +64,7 @@ internal enum class IntrinsicType {
|
||||
IDENTITY,
|
||||
IMMUTABLE_BLOB,
|
||||
INIT_INSTANCE,
|
||||
IS_EXPERIMENTAL_MM,
|
||||
// Enums
|
||||
ENUM_VALUES,
|
||||
ENUM_VALUE_OF,
|
||||
@@ -237,6 +239,7 @@ internal class IntrinsicGenerator(private val environment: IntrinsicGeneratorEnv
|
||||
IntrinsicType.IDENTITY -> emitIdentity(args)
|
||||
IntrinsicType.GET_CONTINUATION -> emitGetContinuation()
|
||||
IntrinsicType.INTEROP_MEMORY_COPY -> emitMemoryCopy(callSite, args)
|
||||
IntrinsicType.IS_EXPERIMENTAL_MM -> emitIsExperimentalMM()
|
||||
IntrinsicType.RETURN_IF_SUSPENDED,
|
||||
IntrinsicType.INTEROP_BITS_TO_FLOAT,
|
||||
IntrinsicType.INTEROP_BITS_TO_DOUBLE,
|
||||
@@ -269,6 +272,9 @@ internal class IntrinsicGenerator(private val environment: IntrinsicGeneratorEnv
|
||||
private fun FunctionGenerationContext.emitIdentity(args: List<LLVMValueRef>): LLVMValueRef =
|
||||
args.single()
|
||||
|
||||
private fun FunctionGenerationContext.emitIsExperimentalMM(): LLVMValueRef =
|
||||
Int1(if (context.memoryModel == MemoryModel.EXPERIMENTAL) 1 else 0).llvm
|
||||
|
||||
private fun FunctionGenerationContext.emitListOfInternal(callSite: IrCall, args: List<LLVMValueRef>): LLVMValueRef {
|
||||
val varargExpression = callSite.getValueArgument(0) as IrVararg
|
||||
val vararg = args.single()
|
||||
|
||||
@@ -4296,6 +4296,11 @@ task interop_sourceCodeStruct(type: KonanLocalTest) {
|
||||
source = "codegen/intrinsics/interop_sourceCodeStruct.kt"
|
||||
}
|
||||
|
||||
standaloneTest("isExperimentalMM") {
|
||||
source = "codegen/intrinsics/isExperimentalMM.kt"
|
||||
flags = [ "-tr" ]
|
||||
}
|
||||
|
||||
interopTest("interop_cppClass") {
|
||||
disabled = (project.testTarget == 'wasm32') // No interop for wasm yet.
|
||||
source = "interop/cpp/cppClass.kt"
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
import kotlin.test.*
|
||||
import kotlin.native.Platform
|
||||
|
||||
@Test
|
||||
@OptIn(kotlin.ExperimentalStdlibApi::class)
|
||||
fun testIsExperimentalMM() {
|
||||
if (isExperimentalMM()) {
|
||||
assertEquals(Platform.memoryModel, MemoryModel.EXPERIMENTAL)
|
||||
} else {
|
||||
assertNotEquals(Platform.memoryModel, MemoryModel.EXPERIMENTAL)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user