Path: blob/master/runtime/j9vm31/jnifield.cpp
12558 views
/*******************************************************************************1* Copyright (c) 2021, 2021 IBM Corp. and others2*3* This program and the accompanying materials are made available under4* the terms of the Eclipse Public License 2.0 which accompanies this5* distribution and is available at https://www.eclipse.org/legal/epl-2.0/6* or the Apache License, Version 2.0 which accompanies this distribution and7* is available at https://www.apache.org/licenses/LICENSE-2.0.8*9* This Source Code may also be made available under the following10* Secondary Licenses when the conditions for such availability set11* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU12* General Public License, version 2 with the GNU Classpath13* Exception [1] and GNU General Public License, version 2 with the14* OpenJDK Assembly Exception [2].15*16* [1] https://www.gnu.org/software/classpath/license.html17* [2] http://openjdk.java.net/legal/assembly-exception.html18*19* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception20*******************************************************************************/2122#include "j9vm31.h"2324jobject JNICALL25GetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID)26{27const jint NUM_ARGS = 3;28J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID };29uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), obj, fieldID };30jobject returnValue;31FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetObjectField);32j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jobject, &returnValue);33return returnValue;34}3536jboolean JNICALL37GetBooleanField(JNIEnv *env, jobject obj, jfieldID fieldID)38{39const jint NUM_ARGS = 3;40J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID };41uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), obj, fieldID };42jboolean returnValue;43FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetBooleanField);44j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jboolean, &returnValue);45return returnValue;46}4748jbyte JNICALL49GetByteField(JNIEnv *env, jobject obj, jfieldID fieldID)50{51const jint NUM_ARGS = 3;52J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID };53uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), obj, fieldID };54jbyte returnValue;55FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetByteField);56j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jbyte, &returnValue);57return returnValue;58}5960jchar JNICALL61GetCharField(JNIEnv *env, jobject obj, jfieldID fieldID)62{63const jint NUM_ARGS = 3;64J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID };65uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), obj, fieldID };66jchar returnValue;67FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetCharField);68j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jchar, &returnValue);69return returnValue;70}7172jshort JNICALL73GetShortField(JNIEnv *env, jobject obj, jfieldID fieldID)74{75const jint NUM_ARGS = 3;76J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID };77uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), obj, fieldID };78jshort returnValue;79FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetShortField);80j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jshort, &returnValue);81return returnValue;82}8384jint JNICALL85GetIntField(JNIEnv *env, jobject obj, jfieldID fieldID)86{87const jint NUM_ARGS = 3;88J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID };89uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), obj, fieldID };90jint returnValue;91FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetIntField);92j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jint, &returnValue);93return returnValue;94}9596jlong JNICALL97GetLongField(JNIEnv *env, jobject obj, jfieldID fieldID)98{99const jint NUM_ARGS = 3;100J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID };101uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), obj, fieldID };102jlong returnValue;103FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetLongField);104j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jlong, &returnValue);105return returnValue;106}107108jfloat JNICALL109GetFloatField(JNIEnv *env, jobject obj, jfieldID fieldID)110{111const jint NUM_ARGS = 3;112J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID };113uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), obj, fieldID };114jfloat returnValue;115FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetFloatField);116j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jfloat, &returnValue);117return returnValue;118}119120jdouble JNICALL121GetDoubleField(JNIEnv *env, jobject obj, jfieldID fieldID)122{123const jint NUM_ARGS = 3;124J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID };125uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), obj, fieldID };126jdouble returnValue;127FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetDoubleField);128j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jdouble, &returnValue);129return returnValue;130}131132void JNICALL133SetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID, jobject value)134{135const jint NUM_ARGS = 4;136J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID, CEL4RO64_type_jobject};137uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), obj, fieldID, value };138FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetObjectField);139j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);140return;141}142143void JNICALL144SetBooleanField(JNIEnv *env, jobject obj, jfieldID fieldID, jboolean value)145{146const jint NUM_ARGS = 4;147J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID, CEL4RO64_type_jboolean};148uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), obj, fieldID, value };149FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetBooleanField);150j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);151return;152}153154void JNICALL155SetByteField(JNIEnv *env, jobject obj, jfieldID fieldID, jbyte value)156{157const jint NUM_ARGS = 4;158J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID, CEL4RO64_type_jbyte};159uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), obj, fieldID, value };160FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetByteField);161j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);162return;163}164165void JNICALL166SetCharField(JNIEnv *env, jobject obj, jfieldID fieldID, jchar value)167{168const jint NUM_ARGS = 4;169J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID, CEL4RO64_type_jchar};170uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), obj, fieldID, value };171FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetCharField);172j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);173return;174}175176void JNICALL177SetShortField(JNIEnv *env, jobject obj, jfieldID fieldID, jshort value)178{179const jint NUM_ARGS = 4;180J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID, CEL4RO64_type_jshort};181uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), obj, fieldID, value };182FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetShortField);183j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);184return;185}186187void JNICALL188SetIntField(JNIEnv *env, jobject obj, jfieldID fieldID, jint value)189{190const jint NUM_ARGS = 4;191J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID, CEL4RO64_type_jint};192uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), obj, fieldID, value };193FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetIntField);194j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);195return;196}197198void JNICALL199SetLongField(JNIEnv *env, jobject obj, jfieldID fieldID, jlong value)200{201const jint NUM_ARGS = 4;202J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID, CEL4RO64_type_jlong};203uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), obj, fieldID, value };204FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetLongField);205j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);206return;207}208209void JNICALL210SetFloatField(JNIEnv *env, jobject obj, jfieldID fieldID, jfloat value)211{212const jint NUM_ARGS = 4;213J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID, CEL4RO64_type_jfloat};214uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), obj, fieldID, 0 };215216/* Floating point parameters requires special handling */217jfloat *floatArgPtr = (jfloat *)(&(argValues[3]));218*floatArgPtr = value;219220FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetFloatField);221j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);222return;223}224225void JNICALL226SetDoubleField(JNIEnv *env, jobject obj, jfieldID fieldID, jdouble value)227{228const jint NUM_ARGS = 4;229J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID, CEL4RO64_type_jdouble};230uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), obj, fieldID, 0 };231232/* Floating point parameters requires special handling */233jdouble *doubleArgPtr = (jdouble *)(&(argValues[3]));234*doubleArgPtr = value;235236FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetDoubleField);237j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);238return;239}240241jobject JNICALL242GetStaticObjectField(JNIEnv *env, jclass clazz, jfieldID fieldID)243{244const jint NUM_ARGS = 3;245J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID };246uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), clazz, fieldID };247jobject returnValue;248FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetStaticObjectField);249j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jobject, &returnValue);250return returnValue;251}252253jboolean JNICALL254GetStaticBooleanField(JNIEnv *env, jclass clazz, jfieldID fieldID)255{256const jint NUM_ARGS = 3;257J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID };258uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), clazz, fieldID };259jboolean returnValue;260FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetStaticBooleanField);261j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jboolean, &returnValue);262return returnValue;263}264265jbyte JNICALL266GetStaticByteField(JNIEnv *env, jclass clazz, jfieldID fieldID)267{268const jint NUM_ARGS = 3;269J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID };270uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), clazz, fieldID };271jbyte returnValue;272FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetStaticByteField);273j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jbyte, &returnValue);274return returnValue;275}276277jchar JNICALL278GetStaticCharField(JNIEnv *env, jclass clazz, jfieldID fieldID)279{280const jint NUM_ARGS = 3;281J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID };282uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), clazz, fieldID };283jchar returnValue;284FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetStaticCharField);285j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jchar, &returnValue);286return returnValue;287}288289jshort JNICALL290GetStaticShortField(JNIEnv *env, jclass clazz, jfieldID fieldID)291{292const jint NUM_ARGS = 3;293J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID };294uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), clazz, fieldID };295jshort returnValue;296FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetStaticShortField);297j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jshort, &returnValue);298return returnValue;299}300301jint JNICALL302GetStaticIntField(JNIEnv *env, jclass clazz, jfieldID fieldID)303{304const jint NUM_ARGS = 3;305J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID };306uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), clazz, fieldID };307jint returnValue;308FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetStaticIntField);309j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jint, &returnValue);310return returnValue;311}312313jlong JNICALL314GetStaticLongField(JNIEnv *env, jclass clazz, jfieldID fieldID)315{316const jint NUM_ARGS = 3;317J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID };318uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), clazz, fieldID };319jlong returnValue;320FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetStaticLongField);321j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jlong, &returnValue);322return returnValue;323}324325jfloat JNICALL326GetStaticFloatField(JNIEnv *env, jclass clazz, jfieldID fieldID)327{328const jint NUM_ARGS = 3;329J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID };330uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), clazz, fieldID };331jfloat returnValue;332FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetStaticFloatField);333j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jfloat, &returnValue);334return returnValue;335}336337jdouble JNICALL338GetStaticDoubleField(JNIEnv *env, jclass clazz, jfieldID fieldID)339{340const jint NUM_ARGS = 3;341J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID };342uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), clazz, fieldID };343jdouble returnValue;344FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetStaticDoubleField);345j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jdouble, &returnValue);346return returnValue;347}348349void JNICALL350SetStaticObjectField(JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value)351{352const jint NUM_ARGS = 4;353J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID, CEL4RO64_type_jobject};354uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), clazz, fieldID, value };355FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetStaticObjectField);356j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);357return;358}359360void JNICALL361SetStaticBooleanField(JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value)362{363const jint NUM_ARGS = 4;364J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID, CEL4RO64_type_jboolean};365uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), clazz, fieldID, value };366FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetStaticBooleanField);367j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);368return;369}370371void JNICALL372SetStaticByteField(JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value)373{374const jint NUM_ARGS = 4;375J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID, CEL4RO64_type_jbyte};376uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), clazz, fieldID, value };377FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetStaticByteField);378j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);379return;380}381382void JNICALL383SetStaticCharField(JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value)384{385const jint NUM_ARGS = 4;386J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID, CEL4RO64_type_jchar};387uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), clazz, fieldID, value };388FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetStaticCharField);389j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);390return;391}392393void JNICALL394SetStaticShortField(JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value)395{396const jint NUM_ARGS = 4;397J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID, CEL4RO64_type_jshort};398uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), clazz, fieldID, value };399FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetStaticShortField);400j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);401return;402}403404void JNICALL405SetStaticIntField(JNIEnv *env, jclass clazz, jfieldID fieldID, jint value)406{407const jint NUM_ARGS = 4;408J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID, CEL4RO64_type_jint};409uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), clazz, fieldID, value };410FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetStaticIntField);411j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);412return;413}414415void JNICALL416SetStaticLongField(JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value)417{418const jint NUM_ARGS = 4;419J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID, CEL4RO64_type_jlong};420uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), clazz, fieldID, value };421FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetStaticLongField);422j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);423return;424}425426void JNICALL427SetStaticFloatField(JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value)428{429const jint NUM_ARGS = 4;430J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID, CEL4RO64_type_jfloat};431uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), clazz, fieldID, 0 };432/* Floating point parameters requires special handling */433jfloat *floatArgPtr = (jfloat *)(&(argValues[3]));434*floatArgPtr = value;435FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetStaticFloatField);436j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);437return;438}439440void JNICALL441SetStaticDoubleField(JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value)442{443const jint NUM_ARGS = 4;444J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jobject, CEL4RO64_type_jfieldID, CEL4RO64_type_jdouble};445uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), clazz, fieldID, 0 };446447/* Floating point parameters requires special handling */448jdouble *doubleArgPtr = (jdouble *)(&(argValues[3]));449*doubleArgPtr = value;450451FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetStaticDoubleField);452j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);453return;454}455456jobject JNICALL457GetObjectArrayElement(JNIEnv *env, jobjectArray array, jsize index)458{459const jint NUM_ARGS = 3;460J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jarray, CEL4RO64_type_jsize };461uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), array, index };462jobject returnValue;463FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, GetObjectArrayElement);464j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_jobject, &returnValue);465return returnValue;466}467468void JNICALL469SetObjectArrayElement(JNIEnv *env, jobjectArray array, jsize index, jobject value)470{471const jint NUM_ARGS = 4;472J9_CEL4RO64_ArgType argTypes[NUM_ARGS] = { CEL4RO64_type_JNIEnv64, CEL4RO64_type_jarray, CEL4RO64_type_jsize, CEL4RO64_type_jobject };473uint64_t argValues[NUM_ARGS] = { JNIENV64_FROM_JNIENV31(env), array, index , value };474FUNCTION_DESCRIPTOR_FROM_JNIENV31(env, SetObjectArrayElement);475j9_cel4ro64_call_function(functionDescriptor, argTypes, argValues, NUM_ARGS, CEL4RO64_type_void, NULL);476return;477}478479480