OLD | NEW |
1 // Copyright 2007-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2007-2009 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 879 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
890 break; | 890 break; |
891 } | 891 } |
892 } | 892 } |
893 return; | 893 return; |
894 } | 894 } |
895 Format(instr, "break 'msg"); | 895 Format(instr, "break 'msg"); |
896 } | 896 } |
897 | 897 |
898 | 898 |
899 // void Decoder::DecodeTypeVFP(Instr* instr) | 899 // void Decoder::DecodeTypeVFP(Instr* instr) |
900 // Implements the following VFP instructions: | 900 // vmov: Sn = Rt |
901 // fmsr: Sn = Rt | 901 // vmov: Rt = Sn |
902 // fmrs: Rt = Sn | 902 // vcvt: Dd = Sm |
903 // fsitod: Dd = Sm | 903 // vcvt: Sd = Dm |
904 // ftosid: Sd = Dm | 904 // Dd = vadd(Dn, Dm) |
905 // Dd = faddd(Dn, Dm) | 905 // Dd = vsub(Dn, Dm) |
906 // Dd = fsubd(Dn, Dm) | 906 // Dd = vmul(Dn, Dm) |
907 // Dd = fmuld(Dn, Dm) | 907 // Dd = vdiv(Dn, Dm) |
908 // Dd = fdivd(Dn, Dm) | |
909 // vcmp(Dd, Dm) | 908 // vcmp(Dd, Dm) |
910 // VMRS | 909 // VMRS |
911 void Decoder::DecodeTypeVFP(Instr* instr) { | 910 void Decoder::DecodeTypeVFP(Instr* instr) { |
912 ASSERT((instr->TypeField() == 7) && (instr->Bit(24) == 0x0) ); | 911 ASSERT((instr->TypeField() == 7) && (instr->Bit(24) == 0x0) ); |
913 | 912 |
914 if (instr->Bit(23) == 1) { | 913 if (instr->Bit(23) == 1) { |
915 if ((instr->Bits(21, 19) == 0x7) && | 914 if ((instr->Bits(21, 19) == 0x7) && |
916 (instr->Bits(18, 16) == 0x5) && | 915 (instr->Bits(18, 16) == 0x5) && |
917 (instr->Bits(11, 9) == 0x5) && | 916 (instr->Bits(11, 9) == 0x5) && |
918 (instr->Bit(8) == 1) && | 917 (instr->Bit(8) == 1) && |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
990 (instr->Bits(3, 0) == 0x0)) { | 989 (instr->Bits(3, 0) == 0x0)) { |
991 Format(instr, "vmov'cond 'rt, 'Sn"); | 990 Format(instr, "vmov'cond 'rt, 'Sn"); |
992 } else { | 991 } else { |
993 Unknown(instr); // Not used by V8. | 992 Unknown(instr); // Not used by V8. |
994 } | 993 } |
995 } | 994 } |
996 } | 995 } |
997 | 996 |
998 | 997 |
999 // Decode Type 6 coprocessor instructions. | 998 // Decode Type 6 coprocessor instructions. |
1000 // Dm = fmdrr(Rt, Rt2) | 999 // Dm = vmov(Rt, Rt2) |
1001 // <Rt, Rt2> = fmrrd(Dm) | 1000 // <Rt, Rt2> = vmov(Dm) |
1002 void Decoder::DecodeType6CoprocessorIns(Instr* instr) { | 1001 void Decoder::DecodeType6CoprocessorIns(Instr* instr) { |
1003 ASSERT((instr->TypeField() == 6)); | 1002 ASSERT((instr->TypeField() == 6)); |
1004 | 1003 |
1005 if (instr->Bit(23) == 1) { | 1004 if (instr->Bit(23) == 1) { |
1006 Unknown(instr); // Not used by V8. | 1005 Unknown(instr); // Not used by V8. |
1007 } else if (instr->Bit(22) == 1) { | 1006 } else if (instr->Bit(22) == 1) { |
1008 if ((instr->Bits(27, 24) == 0xC) && | 1007 if ((instr->Bits(27, 24) == 0xC) && |
1009 (instr->Bit(22) == 1) && | 1008 (instr->Bit(22) == 1) && |
1010 (instr->Bits(11, 8) == 0xB) && | 1009 (instr->Bits(11, 8) == 0xB) && |
1011 (instr->Bits(7, 6) == 0x0) && | 1010 (instr->Bits(7, 6) == 0x0) && |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1158 buffer[0] = '\0'; | 1157 buffer[0] = '\0'; |
1159 byte* prev_pc = pc; | 1158 byte* prev_pc = pc; |
1160 pc += d.InstructionDecode(buffer, pc); | 1159 pc += d.InstructionDecode(buffer, pc); |
1161 fprintf(f, "%p %08x %s\n", | 1160 fprintf(f, "%p %08x %s\n", |
1162 prev_pc, *reinterpret_cast<int32_t*>(prev_pc), buffer.start()); | 1161 prev_pc, *reinterpret_cast<int32_t*>(prev_pc), buffer.start()); |
1163 } | 1162 } |
1164 } | 1163 } |
1165 | 1164 |
1166 | 1165 |
1167 } // namespace disasm | 1166 } // namespace disasm |
OLD | NEW |