15dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak/*
25dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Copyright (c) 1999, 2000, Oracle and/or its affiliates. All rights reserved.
35dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
45dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak *
55dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * This code is free software; you can redistribute it and/or modify it
65dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * under the terms of the GNU General Public License version 2 only, as
75dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * published by the Free Software Foundation.  Oracle designates this
85dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * particular file as subject to the "Classpath" exception as provided
95dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * by Oracle in the LICENSE file that accompanied this code.
105dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak *
115dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * This code is distributed in the hope that it will be useful, but WITHOUT
125dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
135dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
145dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * version 2 for more details (a copy is included in the LICENSE file that
155dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * accompanied this code).
165dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak *
175dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * You should have received a copy of the GNU General Public License version
185dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * 2 along with this work; if not, write to the Free Software Foundation,
195dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
205dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak *
215dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
225dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * or visit www.oracle.com if you need additional information or have any
235dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * questions.
245dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak */
255dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak
265dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak#include "jni.h"
275dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak#include "jvm.h"
285dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak#include "jni_util.h"
295dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak#include "jlong.h"
305dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak
31cab01ac294bb8ded259851673baa4c6ca226f828Steven Moreland#include <nativehelper/JNIHelp.h>
3209d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath
3309d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath#define NATIVE_METHOD(className, functionName, signature) \
3409d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath{ #functionName, signature, (void*)(Java_java_io_ ## className ## _ ## functionName) }
3509d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath
365dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak
375dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak/*
385dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Class:     java_io_ObjectOutputStream
395dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Method:    floatsToBytes
405dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Signature: ([FI[BII)V
415dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak *
425dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Convert nfloats float values to their byte representations.  Float values
435dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * are read from array src starting at offset srcpos and written to array
445dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * dst starting at offset dstpos.
455dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak */
465dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw SzczepaniakJNIEXPORT void JNICALL
475dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw SzczepaniakJava_java_io_ObjectOutputStream_floatsToBytes(JNIEnv *env,
485dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak                                              jclass this,
495dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak                                              jfloatArray src,
505dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak                                              jint srcpos,
515dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak                                              jbyteArray dst,
525dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak                                              jint dstpos,
535dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak                                              jint nfloats)
545dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak{
555dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    union {
565dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        int i;
575dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        float f;
585dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    } u;
595dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    jfloat *floats;
605dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    jbyte *bytes;
615dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    jsize srcend;
625dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    jint ival;
635dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    float fval;
645dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak
655dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    if (nfloats == 0)
665dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        return;
675dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak
685dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    /* fetch source array */
695dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    if (src == NULL) {
705dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        JNU_ThrowNullPointerException(env, NULL);
715dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        return;
725dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    }
735dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    floats = (*env)->GetPrimitiveArrayCritical(env, src, NULL);
745dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    if (floats == NULL)         /* exception thrown */
755dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        return;
765dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak
775dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    /* fetch dest array */
785dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    if (dst == NULL) {
795dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        (*env)->ReleasePrimitiveArrayCritical(env, src, floats, JNI_ABORT);
805dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        JNU_ThrowNullPointerException(env, NULL);
815dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        return;
825dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    }
835dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    bytes = (*env)->GetPrimitiveArrayCritical(env, dst, NULL);
845dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    if (bytes == NULL) {        /* exception thrown */
855dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        (*env)->ReleasePrimitiveArrayCritical(env, src, floats, JNI_ABORT);
865dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        return;
875dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    }
885dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak
895dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    /* do conversion */
905dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    srcend = srcpos + nfloats;
915dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    for ( ; srcpos < srcend; srcpos++) {
925dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        fval = (float) floats[srcpos];
935dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        if (JVM_IsNaN(fval)) {          /* collapse NaNs */
945dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak            ival = 0x7fc00000;
955dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        } else {
965dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak            u.f = fval;
975dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak            ival = (jint) u.i;
985dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        }
995dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        bytes[dstpos++] = (ival >> 24) & 0xFF;
1005dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        bytes[dstpos++] = (ival >> 16) & 0xFF;
1015dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        bytes[dstpos++] = (ival >> 8) & 0xFF;
1025dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        bytes[dstpos++] = (ival >> 0) & 0xFF;
1035dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    }
1045dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak
1055dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    (*env)->ReleasePrimitiveArrayCritical(env, src, floats, JNI_ABORT);
1065dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    (*env)->ReleasePrimitiveArrayCritical(env, dst, bytes, 0);
1075dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak}
1085dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak
1095dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak/*
1105dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Class:     java_io_ObjectOutputStream
1115dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Method:    doublesToBytes
1125dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Signature: ([DI[BII)V
1135dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak *
1145dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * Convert ndoubles double values to their byte representations.  Double
1155dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * values are read from array src starting at offset srcpos and written to
1165dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak * array dst starting at offset dstpos.
1175dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak */
1185dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw SzczepaniakJNIEXPORT void JNICALL
1195dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw SzczepaniakJava_java_io_ObjectOutputStream_doublesToBytes(JNIEnv *env,
1205dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak                                               jclass this,
1215dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak                                               jdoubleArray src,
1225dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak                                               jint srcpos,
1235dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak                                               jbyteArray dst,
1245dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak                                               jint dstpos,
1255dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak                                               jint ndoubles)
1265dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak{
1275dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    union {
1285dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        jlong l;
1295dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        double d;
1305dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    } u;
1315dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    jdouble *doubles;
1325dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    jbyte *bytes;
1335dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    jsize srcend;
1345dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    jdouble dval;
1355dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    jlong lval;
1365dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak
1375dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    if (ndoubles == 0)
1385dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        return;
1395dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak
1405dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    /* fetch source array */
1415dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    if (src == NULL) {
1425dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        JNU_ThrowNullPointerException(env, NULL);
1435dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        return;
1445dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    }
1455dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    doubles = (*env)->GetPrimitiveArrayCritical(env, src, NULL);
1465dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    if (doubles == NULL)                /* exception thrown */
1475dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        return;
1485dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak
1495dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    /* fetch dest array */
1505dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    if (dst == NULL) {
1515dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        (*env)->ReleasePrimitiveArrayCritical(env, src, doubles, JNI_ABORT);
1525dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        JNU_ThrowNullPointerException(env, NULL);
1535dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        return;
1545dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    }
1555dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    bytes = (*env)->GetPrimitiveArrayCritical(env, dst, NULL);
1565dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    if (bytes == NULL) {        /* exception thrown */
1575dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        (*env)->ReleasePrimitiveArrayCritical(env, src, doubles, JNI_ABORT);
1585dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        return;
1595dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    }
1605dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak
1615dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    /* do conversion */
1625dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    srcend = srcpos + ndoubles;
1635dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    for ( ; srcpos < srcend; srcpos++) {
1645dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        dval = doubles[srcpos];
1655dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        if (JVM_IsNaN((double) dval)) {         /* collapse NaNs */
1665dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak            lval = jint_to_jlong(0x7ff80000);
1675dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak            lval = jlong_shl(lval, 32);
1685dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        } else {
1695dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak            jdouble_to_jlong_bits(&dval);
1705dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak            u.d = (double) dval;
1715dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak            lval = u.l;
1725dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        }
1735dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        bytes[dstpos++] = (lval >> 56) & 0xFF;
1745dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        bytes[dstpos++] = (lval >> 48) & 0xFF;
1755dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        bytes[dstpos++] = (lval >> 40) & 0xFF;
1765dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        bytes[dstpos++] = (lval >> 32) & 0xFF;
1775dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        bytes[dstpos++] = (lval >> 24) & 0xFF;
1785dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        bytes[dstpos++] = (lval >> 16) & 0xFF;
1795dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        bytes[dstpos++] = (lval >> 8) & 0xFF;
1805dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak        bytes[dstpos++] = (lval >> 0) & 0xFF;
1815dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    }
1825dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak
1835dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    (*env)->ReleasePrimitiveArrayCritical(env, src, doubles, JNI_ABORT);
1845dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak    (*env)->ReleasePrimitiveArrayCritical(env, dst, bytes, 0);
1855dcd981cd983ba7bcc1fb480e2444e64ec0948bfPrzemyslaw Szczepaniak}
18609d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath
18709d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamathstatic JNINativeMethod gMethods[] = {
18809d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath    NATIVE_METHOD(ObjectOutputStream, floatsToBytes, "([FI[BII)V"),
18909d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath    NATIVE_METHOD(ObjectOutputStream, doublesToBytes, "([DI[BII)V"),
19009d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath};
19109d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath
19209d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamathvoid register_java_io_ObjectOutputStream(JNIEnv* env) {
19309d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath    jniRegisterNativeMethods(env, "java/io/ObjectOutputStream", gMethods, NELEM(gMethods));
19409d3f41f4a3098ba355ee1e25a937d49e38b8fa8Narayan Kamath}
195