2 * Back 2 Browser Bytecode Translator
3 * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, version 2 of the License.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. Look for COPYING file in the top folder.
16 * If not, see http://opensource.org/licenses/GPL-2.0.
18 package org.apidesign.vm4brwsr;
20 import java.io.ByteArrayInputStream;
21 import java.io.DataInputStream;
22 import java.io.IOException;
26 * @author Jaroslav Tulach <jtulach@netbeans.org>
28 public class Numbers {
29 private static Double autoboxDbl() {
32 public static String autoboxDblToString() {
33 return autoboxDbl().toString().toString();
35 public static int rem(int a, int b) {
39 static float deserFloat() throws IOException {
40 byte[] arr = {(byte) 71, (byte) 84, (byte) 52, (byte) 83};
41 ByteArrayInputStream is = new ByteArrayInputStream(arr);
42 DataInputStream dis = new DataInputStream(is);
43 float r = dis.readFloat();
46 static double deserDouble() throws IOException {
47 byte[] arr = {(byte)64, (byte)8, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0, (byte)0};
48 ByteArrayInputStream is = new ByteArrayInputStream(arr);
49 DataInputStream dis = new DataInputStream(is);
50 return dis.readDouble();
52 static long deserLong(byte[] arr) throws IOException {
53 ByteArrayInputStream is = new ByteArrayInputStream(arr);
54 DataInputStream dis = new DataInputStream(is);
55 return dis.readLong();
57 static int deserInt() throws IOException {
58 byte[] arr = {(byte) 71, (byte) 84, (byte) 52, (byte) 83};
59 ByteArrayInputStream is = new ByteArrayInputStream(arr);
60 DataInputStream dis = new DataInputStream(is);
64 static String intToString() {
65 return new Integer(5).toString().toString();
67 static String floatToString() {
68 return new Float(7.0).toString().toString();
71 public static long shlL(byte[] arrValue, int nBits) throws IOException {
72 ByteArrayInputStream isValue = new ByteArrayInputStream(arrValue);
73 DataInputStream disValue = new DataInputStream(isValue);
74 return (disValue.readLong() << nBits);
77 public static long shrL(byte[] arrValue, int nBits) throws IOException {
78 ByteArrayInputStream isValue = new ByteArrayInputStream(arrValue);
79 DataInputStream disValue = new DataInputStream(isValue);
80 return (disValue.readLong() >> nBits);
83 public static long ushrL(byte[] arrValue, int nBits) throws IOException {
84 ByteArrayInputStream isValue = new ByteArrayInputStream(arrValue);
85 DataInputStream disValue = new DataInputStream(isValue);
86 return (disValue.readLong() >>> nBits);
89 public static long andL(byte[] arrX, byte[] arrY) throws IOException {
90 ByteArrayInputStream isX = new ByteArrayInputStream(arrX);
91 DataInputStream disX = new DataInputStream(isX);
92 ByteArrayInputStream isY = new ByteArrayInputStream(arrY);
93 DataInputStream disY = new DataInputStream(isY);
94 return (disX.readLong() & disY.readLong());
97 public static long orL(byte[] arrX, byte[] arrY) throws IOException {
98 ByteArrayInputStream isX = new ByteArrayInputStream(arrX);
99 DataInputStream disX = new DataInputStream(isX);
100 ByteArrayInputStream isY = new ByteArrayInputStream(arrY);
101 DataInputStream disY = new DataInputStream(isY);
102 return (disX.readLong() | disY.readLong());
105 public static long xorL(byte[] arrX, byte[] arrY) throws IOException {
106 ByteArrayInputStream isX = new ByteArrayInputStream(arrX);
107 DataInputStream disX = new DataInputStream(isX);
108 ByteArrayInputStream isY = new ByteArrayInputStream(arrY);
109 DataInputStream disY = new DataInputStream(isY);
110 return (disX.readLong() ^ disY.readLong());
113 public static int compareL(byte[] arrX, byte[] arrY,
114 int zero) throws IOException {
115 ByteArrayInputStream isX = new ByteArrayInputStream(arrX);
116 DataInputStream disX = new DataInputStream(isX);
117 ByteArrayInputStream isY = new ByteArrayInputStream(arrY);
118 DataInputStream disY = new DataInputStream(isY);
119 final long x = disX.readLong();
120 final long y = disY.readLong();
122 final int xyResult = compareL(x, y, zero);
123 final int yxResult = compareL(y, x, zero);
125 return ((xyResult + yxResult) == 0) ? xyResult : -2;
128 private static int compareL(long x, long y, int zero) {
150 return (trueCount == 1) ? result : -2;