Index: src/arm/macro-assembler-arm.cc |
=================================================================== |
--- src/arm/macro-assembler-arm.cc (revision 12826) |
+++ src/arm/macro-assembler-arm.cc (working copy) |
@@ -3216,6 +3216,28 @@ |
} |
+void MacroAssembler::VFPCopyFields(Register dst, Register src, int field_count, |
+ SwVfpRegister first, SwVfpRegister last) { |
+ ASSERT(CpuFeatures::IsEnabled(VFP2)); |
+ ASSERT_LE(first.code(), last.code()); |
+ |
+ if (FLAG_debug_code) { |
+ tst(dst, Operand(kHeapObjectTag)); |
+ tst(src, Operand(kHeapObjectTag), eq); |
+ stop("src and dst for VFPCopyFields must be untagged", ne); |
+ } |
+ |
+ int available_words = last.code() - first.code() + 1; |
+ while (field_count > 0) { |
+ int words_to_copy = Min(field_count, available_words); |
+ SwVfpRegister copy_last = |
+ SwVfpRegister::from_code(first.code() + words_to_copy - 1); |
+ vldm(ia_w, src, first, copy_last); |
+ vstm(ia_w, dst, first, copy_last); |
+ field_count -= words_to_copy; |
+ } |
+} |
danno
2012/10/30 14:28:59
nit: two spaces
|
+ |
void MacroAssembler::CopyBytes(Register src, |
Register dst, |
Register length, |