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

Side by Side Diff: src/arm/assembler-arm.cc

Issue 3064045: Add support for vstr for single precision VFP register. Updated ic-arm to... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: Created 10 years, 4 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/arm/assembler-arm.h ('k') | src/arm/ic-arm.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 (c) 1994-2006 Sun Microsystems Inc. 1 // Copyright (c) 1994-2006 Sun Microsystems Inc.
2 // All Rights Reserved. 2 // All Rights Reserved.
3 // 3 //
4 // Redistribution and use in source and binary forms, with or without 4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions 5 // modification, are permitted provided that the following conditions
6 // are met: 6 // are met:
7 // 7 //
8 // - Redistributions of source code must retain the above copyright notice, 8 // - Redistributions of source code must retain the above copyright notice,
9 // this list of conditions and the following disclaimer. 9 // this list of conditions and the following disclaimer.
10 // 10 //
(...skipping 1802 matching lines...) Expand 10 before | Expand all | Expand 10 after
1813 const Register base, 1813 const Register base,
1814 int offset, 1814 int offset,
1815 const Condition cond) { 1815 const Condition cond) {
1816 // Ddst = MEM(Rbase + offset). 1816 // Ddst = MEM(Rbase + offset).
1817 // Instruction details available in ARM DDI 0406A, A8-628. 1817 // Instruction details available in ARM DDI 0406A, A8-628.
1818 // cond(31-28) | 1101(27-24)| 1001(23-20) | Rbase(19-16) | 1818 // cond(31-28) | 1101(27-24)| 1001(23-20) | Rbase(19-16) |
1819 // Vdst(15-12) | 1011(11-8) | offset 1819 // Vdst(15-12) | 1011(11-8) | offset
1820 ASSERT(CpuFeatures::IsEnabled(VFP3)); 1820 ASSERT(CpuFeatures::IsEnabled(VFP3));
1821 ASSERT(offset % 4 == 0); 1821 ASSERT(offset % 4 == 0);
1822 ASSERT((offset / 4) < 256); 1822 ASSERT((offset / 4) < 256);
1823 ASSERT(offset >= 0);
1823 emit(cond | 0xD9*B20 | base.code()*B16 | dst.code()*B12 | 1824 emit(cond | 0xD9*B20 | base.code()*B16 | dst.code()*B12 |
1824 0xB*B8 | ((offset / 4) & 255)); 1825 0xB*B8 | ((offset / 4) & 255));
1825 } 1826 }
1826 1827
1827 1828
1828 void Assembler::vldr(const SwVfpRegister dst, 1829 void Assembler::vldr(const SwVfpRegister dst,
1829 const Register base, 1830 const Register base,
1830 int offset, 1831 int offset,
1831 const Condition cond) { 1832 const Condition cond) {
1832 // Sdst = MEM(Rbase + offset). 1833 // Sdst = MEM(Rbase + offset).
1833 // Instruction details available in ARM DDI 0406A, A8-628. 1834 // Instruction details available in ARM DDI 0406A, A8-628.
1834 // cond(31-28) | 1101(27-24)| 1001(23-20) | Rbase(19-16) | 1835 // cond(31-28) | 1101(27-24)| 1001(23-20) | Rbase(19-16) |
1835 // Vdst(15-12) | 1010(11-8) | offset 1836 // Vdst(15-12) | 1010(11-8) | offset
1836 ASSERT(CpuFeatures::IsEnabled(VFP3)); 1837 ASSERT(CpuFeatures::IsEnabled(VFP3));
1837 ASSERT(offset % 4 == 0); 1838 ASSERT(offset % 4 == 0);
1838 ASSERT((offset / 4) < 256); 1839 ASSERT((offset / 4) < 256);
1840 ASSERT(offset >= 0);
1839 emit(cond | 0xD9*B20 | base.code()*B16 | dst.code()*B12 | 1841 emit(cond | 0xD9*B20 | base.code()*B16 | dst.code()*B12 |
1840 0xA*B8 | ((offset / 4) & 255)); 1842 0xA*B8 | ((offset / 4) & 255));
1841 } 1843 }
1842 1844
1843 1845
1844 void Assembler::vstr(const DwVfpRegister src, 1846 void Assembler::vstr(const DwVfpRegister src,
1845 const Register base, 1847 const Register base,
1846 int offset, 1848 int offset,
1847 const Condition cond) { 1849 const Condition cond) {
1848 // MEM(Rbase + offset) = Dsrc. 1850 // MEM(Rbase + offset) = Dsrc.
1849 // Instruction details available in ARM DDI 0406A, A8-786. 1851 // Instruction details available in ARM DDI 0406A, A8-786.
1850 // cond(31-28) | 1101(27-24)| 1000(23-20) | | Rbase(19-16) | 1852 // cond(31-28) | 1101(27-24)| 1000(23-20) | | Rbase(19-16) |
1851 // Vsrc(15-12) | 1011(11-8) | (offset/4) 1853 // Vsrc(15-12) | 1011(11-8) | (offset/4)
1852 ASSERT(CpuFeatures::IsEnabled(VFP3)); 1854 ASSERT(CpuFeatures::IsEnabled(VFP3));
1853 ASSERT(offset % 4 == 0); 1855 ASSERT(offset % 4 == 0);
1854 ASSERT((offset / 4) < 256); 1856 ASSERT((offset / 4) < 256);
1857 ASSERT(offset >= 0);
1855 emit(cond | 0xD8*B20 | base.code()*B16 | src.code()*B12 | 1858 emit(cond | 0xD8*B20 | base.code()*B16 | src.code()*B12 |
1856 0xB*B8 | ((offset / 4) & 255)); 1859 0xB*B8 | ((offset / 4) & 255));
1857 } 1860 }
1858 1861
1859 1862
1863 void Assembler::vstr(const SwVfpRegister src,
1864 const Register base,
1865 int offset,
1866 const Condition cond) {
1867 // MEM(Rbase + offset) = SSrc.
1868 // Instruction details available in ARM DDI 0406A, A8-786.
1869 // cond(31-28) | 1101(27-24)| 1000(23-20) | Rbase(19-16) |
1870 // Vdst(15-12) | 1010(11-8) | (offset/4)
1871 ASSERT(CpuFeatures::IsEnabled(VFP3));
1872 ASSERT(offset % 4 == 0);
1873 ASSERT((offset / 4) < 256);
1874 ASSERT(offset >= 0);
1875 emit(cond | 0xD8*B20 | base.code()*B16 | src.code()*B12 |
1876 0xA*B8 | ((offset / 4) & 255));
1877 }
1878
1879
1860 static void DoubleAsTwoUInt32(double d, uint32_t* lo, uint32_t* hi) { 1880 static void DoubleAsTwoUInt32(double d, uint32_t* lo, uint32_t* hi) {
1861 uint64_t i; 1881 uint64_t i;
1862 memcpy(&i, &d, 8); 1882 memcpy(&i, &d, 8);
1863 1883
1864 *lo = i & 0xffffffff; 1884 *lo = i & 0xffffffff;
1865 *hi = i >> 32; 1885 *hi = i >> 32;
1866 } 1886 }
1867 1887
1868 // Only works for little endian floating point formats. 1888 // Only works for little endian floating point formats.
1869 // We don't support VFP on the mixed endian floating point platform. 1889 // We don't support VFP on the mixed endian floating point platform.
(...skipping 701 matching lines...) Expand 10 before | Expand all | Expand 10 after
2571 2591
2572 // Since a constant pool was just emitted, move the check offset forward by 2592 // Since a constant pool was just emitted, move the check offset forward by
2573 // the standard interval. 2593 // the standard interval.
2574 next_buffer_check_ = pc_offset() + kCheckConstInterval; 2594 next_buffer_check_ = pc_offset() + kCheckConstInterval;
2575 } 2595 }
2576 2596
2577 2597
2578 } } // namespace v8::internal 2598 } } // namespace v8::internal
2579 2599
2580 #endif // V8_TARGET_ARCH_ARM 2600 #endif // V8_TARGET_ARCH_ARM
OLDNEW
« no previous file with comments | « src/arm/assembler-arm.h ('k') | src/arm/ic-arm.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698