mirror of
https://github.com/jlengrand/kotlin.git
synced 2026-03-10 08:31:29 +00:00
[K/N] Implement isExperimentalMM intrinsic
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,8 @@
|
||||
package kotlin.native
|
||||
|
||||
import kotlin.native.internal.GCUnsafeCall
|
||||
import kotlin.native.internal.TypedIntrinsic
|
||||
import kotlin.native.internal.IntrinsicType
|
||||
|
||||
/**
|
||||
* Operating system family.
|
||||
@@ -131,3 +133,7 @@ private external fun Platform_getCleanersLeakChecker(): Boolean
|
||||
|
||||
@GCUnsafeCall("Konan_Platform_setCleanersLeakChecker")
|
||||
private external fun Platform_setCleanersLeakChecker(value: Boolean): Unit
|
||||
|
||||
@TypedIntrinsic(IntrinsicType.IS_EXPERIMENTAL_MM)
|
||||
@ExperimentalStdlibApi
|
||||
external fun isExperimentalMM(): Boolean
|
||||
|
||||
@@ -54,6 +54,7 @@ class IntrinsicType {
|
||||
const val IDENTITY = "IDENTITY"
|
||||
const val IMMUTABLE_BLOB = "IMMUTABLE_BLOB"
|
||||
const val INIT_INSTANCE = "INIT_INSTANCE"
|
||||
const val IS_EXPERIMENTAL_MM = "IS_EXPERIMENTAL_MM"
|
||||
|
||||
// Enums
|
||||
const val ENUM_VALUES = "ENUM_VALUES"
|
||||
|
||||
Reference in New Issue
Block a user