blob: e55ab7c5423040d8ad8502812ec05606a62b67e8 [file] [log] [blame]
Ben Murdoch4a90d5f2016-03-22 12:00:34 +00001// Copyright 2014 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "src/arguments.h"
6#include "src/isolate-inl.h"
7#include "src/runtime/runtime-utils.h"
8
9namespace v8 {
10namespace internal {
11
12RUNTIME_FUNCTION(Runtime_Multiply) {
13 HandleScope scope(isolate);
14 DCHECK_EQ(2, args.length());
15 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
16 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
17 Handle<Object> result;
18 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result,
19 Object::Multiply(isolate, lhs, rhs));
20 return *result;
21}
22
23
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000024RUNTIME_FUNCTION(Runtime_Divide) {
25 HandleScope scope(isolate);
26 DCHECK_EQ(2, args.length());
27 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
28 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
29 Handle<Object> result;
30 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result,
31 Object::Divide(isolate, lhs, rhs));
32 return *result;
33}
34
35
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000036RUNTIME_FUNCTION(Runtime_Modulus) {
37 HandleScope scope(isolate);
38 DCHECK_EQ(2, args.length());
39 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
40 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
41 Handle<Object> result;
42 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result,
43 Object::Modulus(isolate, lhs, rhs));
44 return *result;
45}
46
47
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000048RUNTIME_FUNCTION(Runtime_Add) {
49 HandleScope scope(isolate);
50 DCHECK_EQ(2, args.length());
51 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
52 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
53 Handle<Object> result;
54 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result,
55 Object::Add(isolate, lhs, rhs));
56 return *result;
57}
58
59
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000060RUNTIME_FUNCTION(Runtime_Subtract) {
61 HandleScope scope(isolate);
62 DCHECK_EQ(2, args.length());
63 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
64 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
65 Handle<Object> result;
66 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result,
67 Object::Subtract(isolate, lhs, rhs));
68 return *result;
69}
70
71
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000072RUNTIME_FUNCTION(Runtime_ShiftLeft) {
73 HandleScope scope(isolate);
74 DCHECK_EQ(2, args.length());
75 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
76 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
77 Handle<Object> result;
78 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result,
79 Object::ShiftLeft(isolate, lhs, rhs));
80 return *result;
81}
82
83
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000084RUNTIME_FUNCTION(Runtime_ShiftRight) {
85 HandleScope scope(isolate);
86 DCHECK_EQ(2, args.length());
87 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
88 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
89 Handle<Object> result;
90 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result,
91 Object::ShiftRight(isolate, lhs, rhs));
92 return *result;
93}
94
95
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000096RUNTIME_FUNCTION(Runtime_ShiftRightLogical) {
97 HandleScope scope(isolate);
98 DCHECK_EQ(2, args.length());
99 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
100 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
101 Handle<Object> result;
102 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(
103 isolate, result, Object::ShiftRightLogical(isolate, lhs, rhs));
104 return *result;
105}
106
107
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000108RUNTIME_FUNCTION(Runtime_BitwiseAnd) {
109 HandleScope scope(isolate);
110 DCHECK_EQ(2, args.length());
111 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
112 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
113 Handle<Object> result;
114 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result,
115 Object::BitwiseAnd(isolate, lhs, rhs));
116 return *result;
117}
118
119
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000120RUNTIME_FUNCTION(Runtime_BitwiseOr) {
121 HandleScope scope(isolate);
122 DCHECK_EQ(2, args.length());
123 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
124 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
125 Handle<Object> result;
126 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result,
127 Object::BitwiseOr(isolate, lhs, rhs));
128 return *result;
129}
130
131
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000132RUNTIME_FUNCTION(Runtime_BitwiseXor) {
133 HandleScope scope(isolate);
134 DCHECK_EQ(2, args.length());
135 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
136 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
137 Handle<Object> result;
138 ASSIGN_RETURN_FAILURE_ON_EXCEPTION(isolate, result,
139 Object::BitwiseXor(isolate, lhs, rhs));
140 return *result;
141}
142
Ben Murdoch097c5b22016-05-18 11:27:45 +0100143RUNTIME_FUNCTION(Runtime_Equal) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000144 HandleScope scope(isolate);
145 DCHECK_EQ(2, args.length());
Ben Murdoch097c5b22016-05-18 11:27:45 +0100146 CONVERT_ARG_HANDLE_CHECKED(Object, x, 0);
147 CONVERT_ARG_HANDLE_CHECKED(Object, y, 1);
148 Maybe<bool> result = Object::Equals(x, y);
149 if (!result.IsJust()) return isolate->heap()->exception();
150 return isolate->heap()->ToBoolean(result.FromJust());
151}
152
153RUNTIME_FUNCTION(Runtime_NotEqual) {
154 HandleScope scope(isolate);
155 DCHECK_EQ(2, args.length());
156 CONVERT_ARG_HANDLE_CHECKED(Object, x, 0);
157 CONVERT_ARG_HANDLE_CHECKED(Object, y, 1);
158 Maybe<bool> result = Object::Equals(x, y);
159 if (!result.IsJust()) return isolate->heap()->exception();
160 return isolate->heap()->ToBoolean(!result.FromJust());
161}
162
163RUNTIME_FUNCTION(Runtime_StrictEqual) {
164 SealHandleScope scope(isolate);
165 DCHECK_EQ(2, args.length());
166 CONVERT_ARG_CHECKED(Object, x, 0);
167 CONVERT_ARG_CHECKED(Object, y, 1);
168 return isolate->heap()->ToBoolean(x->StrictEquals(y));
169}
170
171RUNTIME_FUNCTION(Runtime_StrictNotEqual) {
172 SealHandleScope scope(isolate);
173 DCHECK_EQ(2, args.length());
174 CONVERT_ARG_CHECKED(Object, x, 0);
175 CONVERT_ARG_CHECKED(Object, y, 1);
176 return isolate->heap()->ToBoolean(!x->StrictEquals(y));
177}
178
179RUNTIME_FUNCTION(Runtime_LessThan) {
180 HandleScope scope(isolate);
181 DCHECK_EQ(2, args.length());
182 CONVERT_ARG_HANDLE_CHECKED(Object, x, 0);
183 CONVERT_ARG_HANDLE_CHECKED(Object, y, 1);
184 Maybe<bool> result = Object::LessThan(x, y);
185 if (!result.IsJust()) return isolate->heap()->exception();
186 return isolate->heap()->ToBoolean(result.FromJust());
187}
188
189RUNTIME_FUNCTION(Runtime_GreaterThan) {
190 HandleScope scope(isolate);
191 DCHECK_EQ(2, args.length());
192 CONVERT_ARG_HANDLE_CHECKED(Object, x, 0);
193 CONVERT_ARG_HANDLE_CHECKED(Object, y, 1);
194 Maybe<bool> result = Object::GreaterThan(x, y);
195 if (!result.IsJust()) return isolate->heap()->exception();
196 return isolate->heap()->ToBoolean(result.FromJust());
197}
198
199RUNTIME_FUNCTION(Runtime_LessThanOrEqual) {
200 HandleScope scope(isolate);
201 DCHECK_EQ(2, args.length());
202 CONVERT_ARG_HANDLE_CHECKED(Object, x, 0);
203 CONVERT_ARG_HANDLE_CHECKED(Object, y, 1);
204 Maybe<bool> result = Object::LessThanOrEqual(x, y);
205 if (!result.IsJust()) return isolate->heap()->exception();
206 return isolate->heap()->ToBoolean(result.FromJust());
207}
208
209RUNTIME_FUNCTION(Runtime_GreaterThanOrEqual) {
210 HandleScope scope(isolate);
211 DCHECK_EQ(2, args.length());
212 CONVERT_ARG_HANDLE_CHECKED(Object, x, 0);
213 CONVERT_ARG_HANDLE_CHECKED(Object, y, 1);
214 Maybe<bool> result = Object::GreaterThanOrEqual(x, y);
215 if (!result.IsJust()) return isolate->heap()->exception();
216 return isolate->heap()->ToBoolean(result.FromJust());
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000217}
218
219} // namespace internal
220} // namespace v8