14d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi/*
24d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi * Copyright (C) 2014 The Android Open Source Project
34d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi *
44d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi * Licensed under the Apache License, Version 2.0 (the "License");
54d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi * you may not use this file except in compliance with the License.
64d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi * You may obtain a copy of the License at
74d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi *
84d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi *      http://www.apache.org/licenses/LICENSE-2.0
94d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi *
104d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi * Unless required by applicable law or agreed to in writing, software
114d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi * distributed under the License is distributed on an "AS IS" BASIS,
124d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi * See the License for the specific language governing permissions and
144d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi * limitations under the License.
154d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi */
164d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi
17e401d146407d61eeb99f8d6176b2ac13c4df1e33Mathieu Chartier#include "art_method-inl.h"
184d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi#include "jni.h"
194d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi#include "mirror/array.h"
204d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi#include "mirror/class.h"
214d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi#include "mirror/class-inl.h"
224d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi#include "mirror/object-inl.h"
234d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi#include "scoped_thread_state_change.h"
244d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi
254d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchinamespace art {
264d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi
271c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampeextern "C" JNIEXPORT jint JNICALL Java_Main_vmArrayBaseOffset(JNIEnv* env, jclass, jobject classObj) {
284d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi  ScopedObjectAccess soa(env);
294d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi  mirror::Class* klass = soa.Decode<mirror::Class*>(classObj);
304d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi  return mirror::Array::DataOffset(
314d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi      Primitive::ComponentSize(klass->GetComponentType()->GetPrimitiveType())).Int32Value();
324d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi}
334d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi
341c83cbc4a817acbd7f9abb5b29a2d418a958e6a1Andreas Gampeextern "C" JNIEXPORT jint JNICALL Java_Main_vmArrayIndexScale(JNIEnv* env, jclass, jobject classObj) {
354d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi  ScopedObjectAccess soa(env);
364d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi  mirror::Class* klass = soa.Decode<mirror::Class*>(classObj);
374d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi  return Primitive::ComponentSize(klass->GetComponentType()->GetPrimitiveType());
384d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi}
394d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi
404d2efce8bf1947880b90efc44448b4940c8016fbHiroshi Yamauchi}  // namespace art
41