Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(201)

Side by Side Diff: src/x64/lithium-x64.cc

Issue 7112010: Plumbing changes to merge various element kind implementaions. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: review feedback Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/x64/lithium-x64.h ('k') | src/x64/stub-cache-x64.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1902 matching lines...) Expand 10 before | Expand all | Expand 10 after
1913 ASSERT(instr->key()->representation().IsInteger32()); 1913 ASSERT(instr->key()->representation().IsInteger32());
1914 LOperand* obj = UseRegisterAtStart(instr->object()); 1914 LOperand* obj = UseRegisterAtStart(instr->object());
1915 LOperand* key = UseRegisterAtStart(instr->key()); 1915 LOperand* key = UseRegisterAtStart(instr->key());
1916 LLoadKeyedFastElement* result = new LLoadKeyedFastElement(obj, key); 1916 LLoadKeyedFastElement* result = new LLoadKeyedFastElement(obj, key);
1917 return AssignEnvironment(DefineSameAsFirst(result)); 1917 return AssignEnvironment(DefineSameAsFirst(result));
1918 } 1918 }
1919 1919
1920 1920
1921 LInstruction* LChunkBuilder::DoLoadKeyedSpecializedArrayElement( 1921 LInstruction* LChunkBuilder::DoLoadKeyedSpecializedArrayElement(
1922 HLoadKeyedSpecializedArrayElement* instr) { 1922 HLoadKeyedSpecializedArrayElement* instr) {
1923 ExternalArrayType array_type = instr->array_type(); 1923 JSObject::ElementsKind elements_kind = instr->elements_kind();
1924 Representation representation(instr->representation()); 1924 Representation representation(instr->representation());
1925 ASSERT( 1925 ASSERT(
1926 (representation.IsInteger32() && (array_type != kExternalFloatArray && 1926 (representation.IsInteger32() &&
1927 array_type != kExternalDoubleArray)) || 1927 (elements_kind != JSObject::EXTERNAL_FLOAT_ELEMENTS) &&
1928 (representation.IsDouble() && (array_type == kExternalFloatArray || 1928 (elements_kind != JSObject::EXTERNAL_DOUBLE_ELEMENTS)) ||
1929 array_type == kExternalDoubleArray))); 1929 (representation.IsDouble() &&
1930 ((elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS) ||
1931 (elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS))));
1930 ASSERT(instr->key()->representation().IsInteger32()); 1932 ASSERT(instr->key()->representation().IsInteger32());
1931 LOperand* external_pointer = UseRegister(instr->external_pointer()); 1933 LOperand* external_pointer = UseRegister(instr->external_pointer());
1932 LOperand* key = UseRegisterOrConstant(instr->key()); 1934 LOperand* key = UseRegisterOrConstant(instr->key());
1933 LLoadKeyedSpecializedArrayElement* result = 1935 LLoadKeyedSpecializedArrayElement* result =
1934 new LLoadKeyedSpecializedArrayElement(external_pointer, key); 1936 new LLoadKeyedSpecializedArrayElement(external_pointer, key);
1935 LInstruction* load_instr = DefineAsRegister(result); 1937 LInstruction* load_instr = DefineAsRegister(result);
1936 // An unsigned int array load might overflow and cause a deopt, make sure it 1938 // An unsigned int array load might overflow and cause a deopt, make sure it
1937 // has an environment. 1939 // has an environment.
1938 return (array_type == kExternalUnsignedIntArray) ? 1940 return (elements_kind == JSObject::EXTERNAL_UNSIGNED_INT_ELEMENTS) ?
1939 AssignEnvironment(load_instr) : load_instr; 1941 AssignEnvironment(load_instr) : load_instr;
1940 } 1942 }
1941 1943
1942 1944
1943 LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) { 1945 LInstruction* LChunkBuilder::DoLoadKeyedGeneric(HLoadKeyedGeneric* instr) {
1944 LOperand* object = UseFixed(instr->object(), rdx); 1946 LOperand* object = UseFixed(instr->object(), rdx);
1945 LOperand* key = UseFixed(instr->key(), rax); 1947 LOperand* key = UseFixed(instr->key(), rax);
1946 1948
1947 LLoadKeyedGeneric* result = new LLoadKeyedGeneric(object, key); 1949 LLoadKeyedGeneric* result = new LLoadKeyedGeneric(object, key);
1948 return MarkAsCall(DefineFixed(result, rax), instr); 1950 return MarkAsCall(DefineFixed(result, rax), instr);
(...skipping 15 matching lines...) Expand all
1964 ? UseTempRegister(instr->key()) 1966 ? UseTempRegister(instr->key())
1965 : UseRegisterOrConstantAtStart(instr->key()); 1967 : UseRegisterOrConstantAtStart(instr->key());
1966 1968
1967 return AssignEnvironment(new LStoreKeyedFastElement(obj, key, val)); 1969 return AssignEnvironment(new LStoreKeyedFastElement(obj, key, val));
1968 } 1970 }
1969 1971
1970 1972
1971 LInstruction* LChunkBuilder::DoStoreKeyedSpecializedArrayElement( 1973 LInstruction* LChunkBuilder::DoStoreKeyedSpecializedArrayElement(
1972 HStoreKeyedSpecializedArrayElement* instr) { 1974 HStoreKeyedSpecializedArrayElement* instr) {
1973 Representation representation(instr->value()->representation()); 1975 Representation representation(instr->value()->representation());
1974 ExternalArrayType array_type = instr->array_type(); 1976 JSObject::ElementsKind elements_kind = instr->elements_kind();
1975 ASSERT( 1977 ASSERT(
1976 (representation.IsInteger32() && (array_type != kExternalFloatArray && 1978 (representation.IsInteger32() &&
1977 array_type != kExternalDoubleArray)) || 1979 (elements_kind != JSObject::EXTERNAL_FLOAT_ELEMENTS) &&
1978 (representation.IsDouble() && (array_type == kExternalFloatArray || 1980 (elements_kind != JSObject::EXTERNAL_DOUBLE_ELEMENTS)) ||
1979 array_type == kExternalDoubleArray))); 1981 (representation.IsDouble() &&
1982 ((elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS) ||
1983 (elements_kind == JSObject::EXTERNAL_DOUBLE_ELEMENTS))));
1980 ASSERT(instr->external_pointer()->representation().IsExternal()); 1984 ASSERT(instr->external_pointer()->representation().IsExternal());
1981 ASSERT(instr->key()->representation().IsInteger32()); 1985 ASSERT(instr->key()->representation().IsInteger32());
1982 1986
1983 LOperand* external_pointer = UseRegister(instr->external_pointer()); 1987 LOperand* external_pointer = UseRegister(instr->external_pointer());
1984 bool val_is_temp_register = array_type == kExternalPixelArray || 1988 bool val_is_temp_register =
1985 array_type == kExternalFloatArray; 1989 elements_kind == JSObject::EXTERNAL_PIXEL_ELEMENTS ||
1990 elements_kind == JSObject::EXTERNAL_FLOAT_ELEMENTS;
1986 LOperand* val = val_is_temp_register 1991 LOperand* val = val_is_temp_register
1987 ? UseTempRegister(instr->value()) 1992 ? UseTempRegister(instr->value())
1988 : UseRegister(instr->value()); 1993 : UseRegister(instr->value());
1989 LOperand* key = UseRegisterOrConstant(instr->key()); 1994 LOperand* key = UseRegisterOrConstant(instr->key());
1990 1995
1991 return new LStoreKeyedSpecializedArrayElement(external_pointer, 1996 return new LStoreKeyedSpecializedArrayElement(external_pointer,
1992 key, 1997 key,
1993 val); 1998 val);
1994 } 1999 }
1995 2000
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
2220 LOperand* key = UseOrConstantAtStart(instr->key()); 2225 LOperand* key = UseOrConstantAtStart(instr->key());
2221 LOperand* object = UseOrConstantAtStart(instr->object()); 2226 LOperand* object = UseOrConstantAtStart(instr->object());
2222 LIn* result = new LIn(key, object); 2227 LIn* result = new LIn(key, object);
2223 return MarkAsCall(DefineFixed(result, rax), instr); 2228 return MarkAsCall(DefineFixed(result, rax), instr);
2224 } 2229 }
2225 2230
2226 2231
2227 } } // namespace v8::internal 2232 } } // namespace v8::internal
2228 2233
2229 #endif // V8_TARGET_ARCH_X64 2234 #endif // V8_TARGET_ARCH_X64
OLDNEW
« no previous file with comments | « src/x64/lithium-x64.h ('k') | src/x64/stub-cache-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698