1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License.
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
1665a54dc66d2c7b6e16fc24a6ce66e50483620745Andy McFadden
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Inlined native functions.
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
20375fb116bcb817b37509ab579dbd55cdbb765cbfCarl Shapiro#ifndef DALVIK_INLINENATIVE_H_
21375fb116bcb817b37509ab579dbd55cdbb765cbfCarl Shapiro#define DALVIK_INLINENATIVE_H_
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* startup/shutdown */
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectbool dvmInlineNativeStartup(void);
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectvoid dvmInlineNativeShutdown(void);
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
27fe700260881c8f59ee2f2dc2308aef3b0cc39734Elliott HughesMethod* dvmFindInlinableMethod(const char* classDescriptor,
28fe700260881c8f59ee2f2dc2308aef3b0cc39734Elliott Hughes    const char* methodName, const char* methodSignature);
29fe700260881c8f59ee2f2dc2308aef3b0cc39734Elliott Hughes
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Basic 4-argument inline operation handler.
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projecttypedef bool (*InlineOp4Func)(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    JValue* pResult);
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Table of inline operations.
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Try to keep this at a power-of-two size, so we don't have to multiply.
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TODO: might be to our advantage to generate a compact jump table on
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the heap at runtime (or just declare two static tables, one with full
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * info and one with just function pointers).  Especially useful if we decide
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * to support other method call forms, e.g. /range.  We can also just
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * generate assembly code that knows how many args it needs and has the
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * target address embedded.
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
48d862faa2ceae186da5518607505eb942d634ced9Carl Shapirostruct InlineOperation {
49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    InlineOp4Func   func;               /* MUST be first entry */
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    const char*     classDescriptor;
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    const char*     methodName;
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    const char*     methodSignature;
53d862faa2ceae186da5518607505eb942d634ced9Carl Shapiro};
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5569ee8f605ad4139c8b9a39821fd7a4cadb9d9337Elliott Hughes/*
566986bcfd1cdeafb594203fee605ebed456fe83c3Elliott Hughes * Must be kept in sync w/ gDvmInlineOpsTable in InlineNative.cpp
5769ee8f605ad4139c8b9a39821fd7a4cadb9d9337Elliott Hughes *
5869ee8f605ad4139c8b9a39821fd7a4cadb9d9337Elliott Hughes * You should also add a test to libcore's IntrinsicTest.
5969ee8f605ad4139c8b9a39821fd7a4cadb9d9337Elliott Hughes */
60d862faa2ceae186da5518607505eb942d634ced9Carl Shapiroenum NativeInlineOps {
6150a6bf2f01efba0acbff9bb03e7ee09688553e08Bill Buzbee    INLINE_EMPTYINLINEMETHOD = 0,
6250a6bf2f01efba0acbff9bb03e7ee09688553e08Bill Buzbee    INLINE_STRING_CHARAT = 1,
6350a6bf2f01efba0acbff9bb03e7ee09688553e08Bill Buzbee    INLINE_STRING_COMPARETO = 2,
6450a6bf2f01efba0acbff9bb03e7ee09688553e08Bill Buzbee    INLINE_STRING_EQUALS = 3,
652bdbcb6db8c3ab984cf64d4a3a3f0d5529aa9e52Elliott Hughes    INLINE_STRING_FASTINDEXOF_II = 4,
662bdbcb6db8c3ab984cf64d4a3a3f0d5529aa9e52Elliott Hughes    INLINE_STRING_IS_EMPTY = 5,
672bdbcb6db8c3ab984cf64d4a3a3f0d5529aa9e52Elliott Hughes    INLINE_STRING_LENGTH = 6,
682bdbcb6db8c3ab984cf64d4a3a3f0d5529aa9e52Elliott Hughes    INLINE_MATH_ABS_INT = 7,
692bdbcb6db8c3ab984cf64d4a3a3f0d5529aa9e52Elliott Hughes    INLINE_MATH_ABS_LONG = 8,
702bdbcb6db8c3ab984cf64d4a3a3f0d5529aa9e52Elliott Hughes    INLINE_MATH_ABS_FLOAT = 9,
712bdbcb6db8c3ab984cf64d4a3a3f0d5529aa9e52Elliott Hughes    INLINE_MATH_ABS_DOUBLE = 10,
722bdbcb6db8c3ab984cf64d4a3a3f0d5529aa9e52Elliott Hughes    INLINE_MATH_MIN_INT = 11,
732bdbcb6db8c3ab984cf64d4a3a3f0d5529aa9e52Elliott Hughes    INLINE_MATH_MAX_INT = 12,
742bdbcb6db8c3ab984cf64d4a3a3f0d5529aa9e52Elliott Hughes    INLINE_MATH_SQRT = 13,
752bdbcb6db8c3ab984cf64d4a3a3f0d5529aa9e52Elliott Hughes    INLINE_MATH_COS = 14,
762bdbcb6db8c3ab984cf64d4a3a3f0d5529aa9e52Elliott Hughes    INLINE_MATH_SIN = 15,
77e22bd84c8c8a57ddd86c21a1f65137d549b07935Elliott Hughes    INLINE_FLOAT_TO_INT_BITS = 16,
78e22bd84c8c8a57ddd86c21a1f65137d549b07935Elliott Hughes    INLINE_FLOAT_TO_RAW_INT_BITS = 17,
79e22bd84c8c8a57ddd86c21a1f65137d549b07935Elliott Hughes    INLINE_INT_BITS_TO_FLOAT = 18,
80e22bd84c8c8a57ddd86c21a1f65137d549b07935Elliott Hughes    INLINE_DOUBLE_TO_LONG_BITS = 19,
81e22bd84c8c8a57ddd86c21a1f65137d549b07935Elliott Hughes    INLINE_DOUBLE_TO_RAW_LONG_BITS = 20,
82e22bd84c8c8a57ddd86c21a1f65137d549b07935Elliott Hughes    INLINE_LONG_BITS_TO_DOUBLE = 21,
836986bcfd1cdeafb594203fee605ebed456fe83c3Elliott Hughes    INLINE_STRICT_MATH_ABS_INT = 22,
846986bcfd1cdeafb594203fee605ebed456fe83c3Elliott Hughes    INLINE_STRICT_MATH_ABS_LONG = 23,
856986bcfd1cdeafb594203fee605ebed456fe83c3Elliott Hughes    INLINE_STRICT_MATH_ABS_FLOAT = 24,
866986bcfd1cdeafb594203fee605ebed456fe83c3Elliott Hughes    INLINE_STRICT_MATH_ABS_DOUBLE = 25,
876986bcfd1cdeafb594203fee605ebed456fe83c3Elliott Hughes    INLINE_STRICT_MATH_MIN_INT = 26,
886986bcfd1cdeafb594203fee605ebed456fe83c3Elliott Hughes    INLINE_STRICT_MATH_MAX_INT = 27,
896986bcfd1cdeafb594203fee605ebed456fe83c3Elliott Hughes    INLINE_STRICT_MATH_SQRT = 28,
90d862faa2ceae186da5518607505eb942d634ced9Carl Shapiro};
9150a6bf2f01efba0acbff9bb03e7ee09688553e08Bill Buzbee
92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Get the inlineops table.
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectconst InlineOperation* dvmGetInlineOpsTable(void);
96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectint dvmGetInlineOpsTableLength(void);
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The table, exposed so we can access it with C inlines.  Prefer access
100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * through dvmGetInlineOpsTable().
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectextern const InlineOperation gDvmInlineOpsTable[];
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Perform the operation specified by "opIndex".
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * We want the arguments to appear in the first 4 registers so they can
108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * be passed straight through to the handler function.  Ideally on ARM
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * they'll go into r0-r3 and stay there.
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns "true" if everything went normally, "false" if an exception
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * was thrown.
113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source ProjectINLINE bool dvmPerformInlineOp4Std(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    JValue* pResult, int opIndex)
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    return (*gDvmInlineOpsTable[opIndex].func)(arg0, arg1, arg2, arg3, pResult);
118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Like the "std" version, but will emit profiling info.
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectbool dvmPerformInlineOp4Dbg(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    JValue* pResult, int opIndex);
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1269a3147c7412f4794434b4c2604aa2ba784867774buzbee/*
1279a3147c7412f4794434b4c2604aa2ba784867774buzbee * Return method & populate the table on first use.
1289a3147c7412f4794434b4c2604aa2ba784867774buzbee */
129d862faa2ceae186da5518607505eb942d634ced9Carl Shapiroextern "C" Method* dvmResolveInlineNative(int opIndex);
1309a3147c7412f4794434b4c2604aa2ba784867774buzbee
131db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro/*
132db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro * The actual inline native definitions.
133db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro */
134db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangString_charAt(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
135db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                           JValue* pResult);
136db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
137db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangString_compareTo(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
138db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                              JValue* pResult);
139db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
140db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangString_equals(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
141db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                           JValue* pResult);
142db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
143db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangString_length(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
144db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                           JValue* pResult);
145db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
146db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangString_isEmpty(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
147db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                            JValue* pResult);
148db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
149db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangString_fastIndexOf_II(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
150db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                                   JValue* pResult);
151db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
152db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangMath_abs_int(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
153db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                          JValue* pResult);
154db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
155db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangMath_abs_long(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
156db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                           JValue* pResult);
157db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
158db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangMath_abs_float(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
159db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                            JValue* pResult);
160db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
161db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangMath_abs_double(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
162db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                             JValue* pResult);
163db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
164db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangMath_min_int(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
165db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                          JValue* pResult);
166db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
167db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangMath_max_int(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
168db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                          JValue* pResult);
169db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
170db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangMath_sqrt(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
171db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                       JValue* pResult);
172db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
173db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangMath_cos(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
174db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                      JValue* pResult);
175db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
176db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangMath_sin(u4 arg0, u4 arg1, u4 arg2, u4 arg3,
177db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                      JValue* pResult);
178db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
179db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangFloat_floatToIntBits(u4 arg0, u4 arg1, u4 arg2, u4 arg,
180db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                                  JValue* pResult);
181db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
182db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangFloat_floatToRawIntBits(u4 arg0, u4 arg1, u4 arg2, u4 arg,
183db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                                     JValue* pResult);
184db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
185db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangFloat_intBitsToFloat(u4 arg0, u4 arg1, u4 arg2, u4 arg,
186db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                                  JValue* pResult);
187db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
188db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangDouble_doubleToLongBits(u4 arg0, u4 arg1, u4 arg2, u4 arg,
189db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                                     JValue* pResult);
190db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
191db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangDouble_longBitsToDouble(u4 arg0, u4 arg1, u4 arg2, u4 arg,
192db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                                     JValue* pResult);
193db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
194db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangDouble_doubleToRawLongBits(u4 arg0, u4 arg1, u4 arg2,
195db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                                        u4 arg, JValue* pResult);
196db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
197db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapirobool javaLangDouble_longBitsToDouble(u4 arg0, u4 arg1, u4 arg2, u4 arg,
198db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro                                     JValue* pResult);
199db0c9549818d9f6e508d26e45ff9d886802aa1daCarl Shapiro
200375fb116bcb817b37509ab579dbd55cdbb765cbfCarl Shapiro#endif  // DALVIK_INLINENATIVE_H_
201