1306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers/* 2306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers * Copyright (C) 2012 The Android Open Source Project 3306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers * 4306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers * Licensed under the Apache License, Version 2.0 (the "License"); 5306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers * you may not use this file except in compliance with the License. 6306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers * You may obtain a copy of the License at 7306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers * 8306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers * http://www.apache.org/licenses/LICENSE-2.0 9306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers * 10306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers * Unless required by applicable law or agreed to in writing, software 11306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers * distributed under the License is distributed on an "AS IS" BASIS, 12306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers * See the License for the specific language governing permissions and 14306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers * limitations under the License. 15306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers */ 16306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers 17fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#ifndef ART_RUNTIME_JVALUE_H_ 18fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#define ART_RUNTIME_JVALUE_H_ 19306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers 20306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers#include "base/macros.h" 21306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers 2262d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers#include <stdint.h> 2362d6c772205b8859f0ebf7ad105402ec4c3e2e01Ian Rogers 24306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogersnamespace art { 252dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogersnamespace mirror { 26306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogersclass Object; 272dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers} // namespace mirror 28306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers 29306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogersunion PACKED(4) JValue { 30306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers // We default initialize JValue instances to all-zeros. 31306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers JValue() : j(0) {} 32306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers 33306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers int8_t GetB() const { return b; } 34306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers void SetB(int8_t new_b) { 357934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom i = ((static_cast<int32_t>(new_b) << 24) >> 24); // Sign-extend. 36306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers } 37306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers 38306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers uint16_t GetC() const { return c; } 39306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers void SetC(uint16_t new_c) { c = new_c; } 40306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers 41306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers double GetD() const { return d; } 42306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers void SetD(double new_d) { d = new_d; } 43306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers 44306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers float GetF() const { return f; } 45306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers void SetF(float new_f) { f = new_f; } 46306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers 47306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers int32_t GetI() const { return i; } 48306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers void SetI(int32_t new_i) { i = new_i; } 49306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers 50306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers int64_t GetJ() const { return j; } 51306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers void SetJ(int64_t new_j) { j = new_j; } 52306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers 532dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers mirror::Object* GetL() const { return l; } 542dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers void SetL(mirror::Object* new_l) { l = new_l; } 55306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers 56306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers int16_t GetS() const { return s; } 57306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers void SetS(int16_t new_s) { 587934ac288acfb2552bb0b06ec1f61e5820d924a4Brian Carlstrom i = ((static_cast<int32_t>(new_s) << 16) >> 16); // Sign-extend. 59306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers } 60306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers 61306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers uint8_t GetZ() const { return z; } 62306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers void SetZ(uint8_t new_z) { z = new_z; } 63306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers 64ef484d442a3dcae2cd1842c5be0623f5cf71e4abMingyao Yang mirror::Object** GetGCRoot() { return &l; } 65ef484d442a3dcae2cd1842c5be0623f5cf71e4abMingyao Yang 66306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers private: 67306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers uint8_t z; 68306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers int8_t b; 69306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers uint16_t c; 70306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers int16_t s; 71306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers int32_t i; 72306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers int64_t j; 73306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers float f; 74306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers double d; 752dd0e2cea360bc9206eb88ecc40d259e796c239dIan Rogers mirror::Object* l; 76306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers}; 77306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers 78306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers} // namespace art 79306057fd278d75bf3794bd5243a3b6652c487d18Ian Rogers 80fc0e3219edc9a5bf81b166e82fd5db2796eb6a0dBrian Carlstrom#endif // ART_RUNTIME_JVALUE_H_ 81