Fixing the ClassLoader.defineClass() method issue that could not find the necessary...
[jpf-core.git] / src / peers / gov / nasa / jpf / vm / JPF_java_lang_Math.java
1 /*
2  * Copyright (C) 2014, United States Government, as represented by the
3  * Administrator of the National Aeronautics and Space Administration.
4  * All rights reserved.
5  *
6  * The Java Pathfinder core (jpf-core) platform is licensed under the
7  * Apache License, Version 2.0 (the "License"); you may not use this file except
8  * in compliance with the License. You may obtain a copy of the License at
9  * 
10  *        http://www.apache.org/licenses/LICENSE-2.0. 
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and 
16  * limitations under the License.
17  */
18 package gov.nasa.jpf.vm;
19
20 import gov.nasa.jpf.annotation.MJI;
21 import gov.nasa.jpf.vm.MJIEnv;
22 import gov.nasa.jpf.vm.NativePeer;
23
24 /**
25  * MJI NativePeer class for java.lang.Math library abstraction
26  */
27 public class JPF_java_lang_Math extends NativePeer {
28   
29   // <2do> those are here to hide their implementation from traces, not to
30   // increase performance. If we want to do that, we should probably inline
31   // their real implementation here, instead of delegating (just a compromise)
32   @MJI
33   public double abs__D__D (MJIEnv env, int clsObjRef, double a) {
34     // return Math.abs(a);
35     
36     return (a <= .0) ? (.0 - a) : a;
37   }
38
39   @MJI
40   public float abs__F__F (MJIEnv env, int clsObjRef, float a) {
41     return Math.abs(a);
42   }
43
44   @MJI
45   public int abs__I__I (MJIEnv env, int clsObjRef, int a) {
46     //return Math.abs(a);
47     return (a < 0) ? -a : a; // that's probably slightly faster
48   }
49
50   @MJI
51   public long abs__J__J (MJIEnv env, int clsObjRef, long a) {
52     //return Math.abs(a);
53     
54     return (a < 0) ? -a : a;
55   }
56
57   @MJI
58   public double max__DD__D (MJIEnv env, int clsObjRef, double a, double b) {
59     // that one has to handle inexact numbers, so it's probably not worth the hassle
60     // to inline it
61     return Math.max(a, b);
62   }
63
64   @MJI
65   public float max__FF__F (MJIEnv env, int clsObjRef, float a, float b) {
66     return Math.max(a, b);
67   }
68
69   @MJI
70   public int max__II__I (MJIEnv env, int clsObjRef, int a, int b) {
71     //return Math.max(a, b);
72     
73     return (a >= b) ? a : b;
74   }
75
76   @MJI
77   public long max__JJ__J (MJIEnv env, int clsObjRef, long a, long b) {
78     //return Math.max(a, b);
79     return (a >= b) ? a : b;
80   }
81
82   @MJI
83   public double min__DD__D (MJIEnv env, int clsObjRef, double a, double b) {
84     return Math.min(a, b);
85   }
86
87   @MJI
88   public float min__FF__F (MJIEnv env, int clsObjRef, float a, float b) {
89     return Math.min(a, b);
90   }
91
92   @MJI
93   public int min__II__I (MJIEnv env, int clsObjRef, int a, int b) {
94     return Math.min(a, b);
95   }
96
97   @MJI
98   public long min__JJ__J (MJIEnv env, int clsObjRef, long a, long b) {
99     return Math.min(a, b);
100   }
101
102   @MJI
103   public double pow__DD__D (MJIEnv env, int clsObjRef, double a, double b) {
104     return Math.pow(a, b);
105   }
106
107   @MJI
108   public double sqrt__D__D (MJIEnv env, int clsObjRef, double a) {
109     return Math.sqrt(a);
110   }
111   
112   @MJI
113   public double random____D (MJIEnv env, int clsObjRef) {
114     return Math.random();
115   }
116   
117   @MJI
118   public long round__D__J (MJIEnv env, int clsObjRef, double a){
119     return Math.round(a);
120   }
121   
122   @MJI
123   public double exp__D__D (MJIEnv env, int clsObjRef, double a) {
124     return Math.exp(a);
125   }
126   
127   @MJI
128   public double asin__D__D (MJIEnv env, int clsObjRef, double a) {
129     return Math.asin(a);
130   }
131
132   @MJI
133   public double acos__D__D (MJIEnv env, int clsObjRef, double a) {
134     return Math.acos(a);
135   }
136   
137   @MJI
138   public double atan__D__D (MJIEnv env, int clsObjRef, double a) {
139     return Math.atan(a);
140   }
141   
142   @MJI
143   public double atan2__DD__D (MJIEnv env, int clsObjRef, double a, double b) {
144     return Math.atan2(a,b);
145   }
146   
147   @MJI
148   public double ceil__D__D (MJIEnv env, int clsObjRef, double a) {
149     return Math.ceil(a);
150   }
151   
152   @MJI
153   public double cos__D__D (MJIEnv env, int clsObjRef, double a) {
154     return Math.cos(a);
155   }
156   
157   @MJI
158   public double floor__D__D (MJIEnv env, int clsObjRef, double a) {
159     return Math.floor(a);
160   }
161   
162   @MJI
163   public double log10__D__D (MJIEnv env, int clsObjRef, double a) {
164         return Math.log10(a);
165   }  
166   
167   @MJI
168   public double log__D__D (MJIEnv env, int clsObjRef, double a) {
169     return Math.log(a);
170   }
171   
172   @MJI
173   public double rint__D__D (MJIEnv env, int clsObjRef, double a) {
174     return Math.rint(a);
175   }
176   
177   @MJI
178   public double sin__D__D (MJIEnv env, int clsObjRef, double a) {
179     return Math.sin(a);
180   }
181   
182   @MJI
183   public double tan__D__D (MJIEnv env, int clsObjRef, double a) {
184     return Math.tan(a);
185   }
186 }