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

Side by Side Diff: src/ia32/disasm-ia32.cc

Issue 2582001: Add optimized version of memcpy on ia32. (Closed)
Patch Set: Created 10 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
OLDNEW
1 // Copyright 2007-2008 the V8 project authors. All rights reserved. 1 // Copyright 2007-2008 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 799 matching lines...) Expand 10 before | Expand all | Expand 10 after
810 AppendToBuffer("%s", mnem); 810 AppendToBuffer("%s", mnem);
811 } 811 }
812 return 2; 812 return 2;
813 } 813 }
814 814
815 815
816 // Mnemonics for instructions 0xF0 byte. 816 // Mnemonics for instructions 0xF0 byte.
817 // Returns NULL if the instruction is not handled here. 817 // Returns NULL if the instruction is not handled here.
818 static const char* F0Mnem(byte f0byte) { 818 static const char* F0Mnem(byte f0byte) {
819 switch (f0byte) { 819 switch (f0byte) {
820 case 0x18: return "prefetch";
Erik Corry 2010/06/04 07:07:40 What about the other instructions? Can they alrea
Lasse Reichstein 2010/06/04 11:52:13 movntdq[a] can't, but they aren't used yet either.
820 case 0xA2: return "cpuid"; 821 case 0xA2: return "cpuid";
821 case 0x31: return "rdtsc"; 822 case 0x31: return "rdtsc";
822 case 0xBE: return "movsx_b"; 823 case 0xBE: return "movsx_b";
823 case 0xBF: return "movsx_w"; 824 case 0xBF: return "movsx_w";
824 case 0xB6: return "movzx_b"; 825 case 0xB6: return "movzx_b";
825 case 0xB7: return "movzx_w"; 826 case 0xB7: return "movzx_w";
826 case 0xAF: return "imul"; 827 case 0xAF: return "imul";
827 case 0xA5: return "shld"; 828 case 0xA5: return "shld";
828 case 0xAD: return "shrd"; 829 case 0xAD: return "shrd";
829 case 0xAB: return "bts"; 830 case 0xAB: return "bts";
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
935 break; 936 break;
936 937
937 case 0x81: // fall through 938 case 0x81: // fall through
938 case 0x83: // 0x81 with sign extension bit set 939 case 0x83: // 0x81 with sign extension bit set
939 data += PrintImmediateOp(data); 940 data += PrintImmediateOp(data);
940 break; 941 break;
941 942
942 case 0x0F: 943 case 0x0F:
943 { byte f0byte = *(data+1); 944 { byte f0byte = *(data+1);
944 const char* f0mnem = F0Mnem(f0byte); 945 const char* f0mnem = F0Mnem(f0byte);
945 if (f0byte == 0xA2 || f0byte == 0x31) { 946 if (f0byte == 0x18) {
947 int mod, regop, rm;
948 get_modrm(*data, &mod, &regop, &rm);
949 const char* suffix[] = {"nta", "1", "2", "3"};
950 AppendToBuffer("%s%s ", f0mnem, suffix[regop & 0x03]);
951 data += PrintRightOperand(data);
952 } else if (f0byte == 0xA2 || f0byte == 0x31) {
946 AppendToBuffer("%s", f0mnem); 953 AppendToBuffer("%s", f0mnem);
947 data += 2; 954 data += 2;
948 } else if ((f0byte & 0xF0) == 0x80) { 955 } else if ((f0byte & 0xF0) == 0x80) {
949 data += JumpConditional(data, branch_hint); 956 data += JumpConditional(data, branch_hint);
950 } else if (f0byte == 0xBE || f0byte == 0xBF || f0byte == 0xB6 || 957 } else if (f0byte == 0xBE || f0byte == 0xBF || f0byte == 0xB6 ||
951 f0byte == 0xB7 || f0byte == 0xAF) { 958 f0byte == 0xB7 || f0byte == 0xAF) {
952 data += 2; 959 data += 2;
953 data += PrintOperands(f0mnem, REG_OPER_OP_ORDER, data); 960 data += PrintOperands(f0mnem, REG_OPER_OP_ORDER, data);
954 } else if ((f0byte & 0xF0) == 0x90) { 961 } else if ((f0byte & 0xF0) == 0x90) {
955 data += SetCC(data); 962 data += SetCC(data);
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after
1437 fprintf(f, " "); 1444 fprintf(f, " ");
1438 } 1445 }
1439 fprintf(f, " %s\n", buffer.start()); 1446 fprintf(f, " %s\n", buffer.start());
1440 } 1447 }
1441 } 1448 }
1442 1449
1443 1450
1444 } // namespace disasm 1451 } // namespace disasm
1445 1452
1446 #endif // V8_TARGET_ARCH_IA32 1453 #endif // V8_TARGET_ARCH_IA32
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698