blob: 2a9255b77eda0b0f26ae4bf9b2296fa7c46273ad [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);
Ben Murdoch61f157c2016-09-16 13:49:30 +010017 RETURN_RESULT_OR_FAILURE(isolate, Object::Multiply(isolate, lhs, rhs));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000018}
19
20
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000021RUNTIME_FUNCTION(Runtime_Divide) {
22 HandleScope scope(isolate);
23 DCHECK_EQ(2, args.length());
24 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
25 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
Ben Murdoch61f157c2016-09-16 13:49:30 +010026 RETURN_RESULT_OR_FAILURE(isolate, Object::Divide(isolate, lhs, rhs));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000027}
28
29
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000030RUNTIME_FUNCTION(Runtime_Modulus) {
31 HandleScope scope(isolate);
32 DCHECK_EQ(2, args.length());
33 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
34 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
Ben Murdoch61f157c2016-09-16 13:49:30 +010035 RETURN_RESULT_OR_FAILURE(isolate, Object::Modulus(isolate, lhs, rhs));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000036}
37
38
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000039RUNTIME_FUNCTION(Runtime_Add) {
40 HandleScope scope(isolate);
41 DCHECK_EQ(2, args.length());
42 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
43 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
Ben Murdoch61f157c2016-09-16 13:49:30 +010044 RETURN_RESULT_OR_FAILURE(isolate, Object::Add(isolate, lhs, rhs));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000045}
46
47
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000048RUNTIME_FUNCTION(Runtime_Subtract) {
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);
Ben Murdoch61f157c2016-09-16 13:49:30 +010053 RETURN_RESULT_OR_FAILURE(isolate, Object::Subtract(isolate, lhs, rhs));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000054}
55
56
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000057RUNTIME_FUNCTION(Runtime_ShiftLeft) {
58 HandleScope scope(isolate);
59 DCHECK_EQ(2, args.length());
60 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
61 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
Ben Murdoch61f157c2016-09-16 13:49:30 +010062 RETURN_RESULT_OR_FAILURE(isolate, Object::ShiftLeft(isolate, lhs, rhs));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000063}
64
65
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000066RUNTIME_FUNCTION(Runtime_ShiftRight) {
67 HandleScope scope(isolate);
68 DCHECK_EQ(2, args.length());
69 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
70 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
Ben Murdoch61f157c2016-09-16 13:49:30 +010071 RETURN_RESULT_OR_FAILURE(isolate, Object::ShiftRight(isolate, lhs, rhs));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000072}
73
74
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000075RUNTIME_FUNCTION(Runtime_ShiftRightLogical) {
76 HandleScope scope(isolate);
77 DCHECK_EQ(2, args.length());
78 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
79 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
Ben Murdoch61f157c2016-09-16 13:49:30 +010080 RETURN_RESULT_OR_FAILURE(isolate,
81 Object::ShiftRightLogical(isolate, lhs, rhs));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000082}
83
84
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000085RUNTIME_FUNCTION(Runtime_BitwiseAnd) {
86 HandleScope scope(isolate);
87 DCHECK_EQ(2, args.length());
88 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
89 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
Ben Murdoch61f157c2016-09-16 13:49:30 +010090 RETURN_RESULT_OR_FAILURE(isolate, Object::BitwiseAnd(isolate, lhs, rhs));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000091}
92
93
Ben Murdoch4a90d5f2016-03-22 12:00:34 +000094RUNTIME_FUNCTION(Runtime_BitwiseOr) {
95 HandleScope scope(isolate);
96 DCHECK_EQ(2, args.length());
97 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
98 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
Ben Murdoch61f157c2016-09-16 13:49:30 +010099 RETURN_RESULT_OR_FAILURE(isolate, Object::BitwiseOr(isolate, lhs, rhs));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000100}
101
102
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000103RUNTIME_FUNCTION(Runtime_BitwiseXor) {
104 HandleScope scope(isolate);
105 DCHECK_EQ(2, args.length());
106 CONVERT_ARG_HANDLE_CHECKED(Object, lhs, 0);
107 CONVERT_ARG_HANDLE_CHECKED(Object, rhs, 1);
Ben Murdoch61f157c2016-09-16 13:49:30 +0100108 RETURN_RESULT_OR_FAILURE(isolate, Object::BitwiseXor(isolate, lhs, rhs));
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000109}
110
Ben Murdoch097c5b22016-05-18 11:27:45 +0100111RUNTIME_FUNCTION(Runtime_Equal) {
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000112 HandleScope scope(isolate);
113 DCHECK_EQ(2, args.length());
Ben Murdoch097c5b22016-05-18 11:27:45 +0100114 CONVERT_ARG_HANDLE_CHECKED(Object, x, 0);
115 CONVERT_ARG_HANDLE_CHECKED(Object, y, 1);
116 Maybe<bool> result = Object::Equals(x, y);
117 if (!result.IsJust()) return isolate->heap()->exception();
118 return isolate->heap()->ToBoolean(result.FromJust());
119}
120
121RUNTIME_FUNCTION(Runtime_NotEqual) {
122 HandleScope scope(isolate);
123 DCHECK_EQ(2, args.length());
124 CONVERT_ARG_HANDLE_CHECKED(Object, x, 0);
125 CONVERT_ARG_HANDLE_CHECKED(Object, y, 1);
126 Maybe<bool> result = Object::Equals(x, y);
127 if (!result.IsJust()) return isolate->heap()->exception();
128 return isolate->heap()->ToBoolean(!result.FromJust());
129}
130
131RUNTIME_FUNCTION(Runtime_StrictEqual) {
132 SealHandleScope scope(isolate);
133 DCHECK_EQ(2, args.length());
134 CONVERT_ARG_CHECKED(Object, x, 0);
135 CONVERT_ARG_CHECKED(Object, y, 1);
136 return isolate->heap()->ToBoolean(x->StrictEquals(y));
137}
138
139RUNTIME_FUNCTION(Runtime_StrictNotEqual) {
140 SealHandleScope scope(isolate);
141 DCHECK_EQ(2, args.length());
142 CONVERT_ARG_CHECKED(Object, x, 0);
143 CONVERT_ARG_CHECKED(Object, y, 1);
144 return isolate->heap()->ToBoolean(!x->StrictEquals(y));
145}
146
147RUNTIME_FUNCTION(Runtime_LessThan) {
148 HandleScope scope(isolate);
149 DCHECK_EQ(2, args.length());
150 CONVERT_ARG_HANDLE_CHECKED(Object, x, 0);
151 CONVERT_ARG_HANDLE_CHECKED(Object, y, 1);
152 Maybe<bool> result = Object::LessThan(x, y);
153 if (!result.IsJust()) return isolate->heap()->exception();
154 return isolate->heap()->ToBoolean(result.FromJust());
155}
156
157RUNTIME_FUNCTION(Runtime_GreaterThan) {
158 HandleScope scope(isolate);
159 DCHECK_EQ(2, args.length());
160 CONVERT_ARG_HANDLE_CHECKED(Object, x, 0);
161 CONVERT_ARG_HANDLE_CHECKED(Object, y, 1);
162 Maybe<bool> result = Object::GreaterThan(x, y);
163 if (!result.IsJust()) return isolate->heap()->exception();
164 return isolate->heap()->ToBoolean(result.FromJust());
165}
166
167RUNTIME_FUNCTION(Runtime_LessThanOrEqual) {
168 HandleScope scope(isolate);
169 DCHECK_EQ(2, args.length());
170 CONVERT_ARG_HANDLE_CHECKED(Object, x, 0);
171 CONVERT_ARG_HANDLE_CHECKED(Object, y, 1);
172 Maybe<bool> result = Object::LessThanOrEqual(x, y);
173 if (!result.IsJust()) return isolate->heap()->exception();
174 return isolate->heap()->ToBoolean(result.FromJust());
175}
176
177RUNTIME_FUNCTION(Runtime_GreaterThanOrEqual) {
178 HandleScope scope(isolate);
179 DCHECK_EQ(2, args.length());
180 CONVERT_ARG_HANDLE_CHECKED(Object, x, 0);
181 CONVERT_ARG_HANDLE_CHECKED(Object, y, 1);
182 Maybe<bool> result = Object::GreaterThanOrEqual(x, y);
183 if (!result.IsJust()) return isolate->heap()->exception();
184 return isolate->heap()->ToBoolean(result.FromJust());
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000185}
186
Ben Murdochc5610432016-08-08 18:44:38 +0100187RUNTIME_FUNCTION(Runtime_InstanceOf) {
188 HandleScope shs(isolate);
189 DCHECK_EQ(2, args.length());
190 CONVERT_ARG_HANDLE_CHECKED(Object, object, 0);
191 CONVERT_ARG_HANDLE_CHECKED(Object, callable, 1);
Ben Murdoch61f157c2016-09-16 13:49:30 +0100192 RETURN_RESULT_OR_FAILURE(isolate,
193 Object::InstanceOf(isolate, object, callable));
Ben Murdochc5610432016-08-08 18:44:38 +0100194}
195
Ben Murdoch4a90d5f2016-03-22 12:00:34 +0000196} // namespace internal
197} // namespace v8