}
-enum ArgLocation {
- ARGS_ON_STACK,
- ARGS_IN_REGISTERS
-};
-
-
class FloatingPointHelper : public AllStatic {
public:
+
+ enum ArgLocation {
+ ARGS_ON_STACK,
+ ARGS_IN_REGISTERS
+ };
+
// Code pattern for loading a floating point value. Input value must
// be either a smi or a heap number object (fp value). Requirements:
// operand in register number. Returns operand as floating point number
void GenericBinaryOpStub::GenerateSmiCode(MacroAssembler* masm, Label* slow) {
- if (HasArgumentsInRegisters()) {
+ if (HasArgsInRegisters()) {
__ mov(ebx, eax);
__ mov(eax, edx);
} else {
case Token::DIV: {
Label after_alloc_failure;
- ArgLocation arg_location =
+ FloatingPointHelper::ArgLocation arg_location =
(op_ == Token::ADD || op_ == Token::SUB) ?
- ARGS_IN_REGISTERS :
- ARGS_ON_STACK;
+ FloatingPointHelper::ARGS_IN_REGISTERS :
+ FloatingPointHelper::ARGS_ON_STACK;
__ AllocateHeapNumber(
edx,
ecx,
no_reg,
- arg_location == ARGS_IN_REGISTERS ? &after_alloc_failure : slow);
+ arg_location == FloatingPointHelper::ARGS_IN_REGISTERS ?
+ &after_alloc_failure :
+ slow);
if (CpuFeatures::IsSupported(SSE2)) {
CpuFeatures::Scope use_sse2(SSE2);
__ mov(eax, edx);
GenerateReturn(masm);
- if (arg_location == ARGS_IN_REGISTERS) {
+ if (arg_location == FloatingPointHelper::ARGS_IN_REGISTERS) {
__ bind(&after_alloc_failure);
__ mov(edx, eax);
__ mov(eax, ebx);
__ jmp(slow);
}
+ break;
}
+
case Token::BIT_OR:
case Token::BIT_AND:
case Token::BIT_XOR:
GenerateReturn(masm);
} else { // SSE2 not available, use FPU.
FloatingPointHelper::CheckFloatOperands(masm, &call_runtime, ebx);
- FloatingPointHelper::LoadFloatOperands(masm, ecx, ARGS_IN_REGISTERS);
+ FloatingPointHelper::LoadFloatOperands(
+ masm,
+ ecx,
+ FloatingPointHelper::ARGS_IN_REGISTERS);
switch (op_) {
case Token::ADD: __ faddp(1); break;
case Token::SUB: __ fsubp(1); break;
// result. If arguments was passed in registers now place them on the
// stack in the correct order below the return address.
__ bind(&call_runtime);
- if (HasArgumentsInRegisters()) {
+ if (HasArgsInRegisters()) {
__ pop(ecx);
- if (HasArgumentsReversed()) {
+ if (HasArgsReversed()) {
__ push(eax);
__ push(edx);
} else {
// Only first argument is a string.
__ bind(&string1);
__ InvokeBuiltin(
- HasArgumentsReversed() ?
+ HasArgsReversed() ?
Builtins::STRING_ADD_RIGHT :
Builtins::STRING_ADD_LEFT,
- JUMP_FUNCTION);
+ JUMP_FUNCTION);
// First argument was not a string, test second.
__ bind(¬_string1);
// Only second argument is a string.
__ InvokeBuiltin(
- HasArgumentsReversed() ?
+ HasArgsReversed() ?
Builtins::STRING_ADD_LEFT :
Builtins::STRING_ADD_RIGHT,
- JUMP_FUNCTION);
+ JUMP_FUNCTION);
__ bind(¬_strings);
// Neither argument is a string.
Label* alloc_failure) {
Label skip_allocation;
OverwriteMode mode = mode_;
- if (HasArgumentsReversed()) {
+ if (HasArgsReversed()) {
if (mode == OVERWRITE_RIGHT) {
mode = OVERWRITE_LEFT;
} else if (mode == OVERWRITE_LEFT) {
void GenericBinaryOpStub::GenerateLoadArguments(MacroAssembler* masm) {
// If arguments are not passed in registers read them from the stack.
- if (!HasArgumentsInRegisters()) {
+ if (!HasArgsInRegisters()) {
__ mov(eax, Operand(esp, 1 * kPointerSize));
__ mov(edx, Operand(esp, 2 * kPointerSize));
}
void GenericBinaryOpStub::GenerateReturn(MacroAssembler* masm) {
// If arguments are not passed in registers remove them from the stack before
// returning.
- if (!HasArgumentsInRegisters()) {
+ if (!HasArgsInRegisters()) {
__ ret(2 * kPointerSize); // Remove both operands
} else {
__ ret(0);
// are also OK. Though MUL and DIV on SMIs modify the original registers so
// we need to push args on stack anyway.
bool ArgsInRegistersSupported() {
- return ((op_ == Token::ADD) || (op_ == Token::SUB)) ||
- (((op_ == Token::MUL) || (op_ == Token::DIV))
- && (flags_ == NO_SMI_CODE_IN_STUB));
+ if (op_ == Token::ADD || op_ == Token::SUB) return true;
+ if (op_ == Token::MUL || op_ == Token::DIV) {
+ return flags_ == NO_SMI_CODE_IN_STUB;
+ }
+ return false;
}
bool IsOperationCommutative() {
return (op_ == Token::ADD) || (op_ == Token::MUL);
void SetArgsInRegisters() { args_in_registers_ = true; }
void SetArgsReversed() { args_reversed_ = true; }
bool HasSmiCodeInStub() { return (flags_ & NO_SMI_CODE_IN_STUB) == 0; }
- bool HasArgumentsInRegisters() { return args_in_registers_; }
- bool HasArgumentsReversed() { return args_reversed_; }
+ bool HasArgsInRegisters() { return args_in_registers_; }
+ bool HasArgsReversed() { return args_reversed_; }
};