Windows CE 6.0 แทนที่ memcpy Cortex A8

ฉันกำลังทำงานกับ Freescale i.Mx51 และต้องการแทนที่ฟังก์ชัน memcpy ของ Windows CE 6.0 ด้วยฟังก์ชัน memcpy ที่ใช้ NEON

ฉันพบบนหน้าแรกของ ARM (http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.faqs/ka13544.html) โค้ดบางส่วนว่าควรทำงานอย่างไร

ปัญหาแรกของฉันคือ: ฉันจะพบโค้ด memcpy ในโปรเจ็กต์ตัวสร้างแพลตฟอร์มได้ที่ไหน และฉันจะเปลี่ยนโค้ดได้อย่างไร ฉันพบบทช่วยสอน (http://blogs.msdn.com/b/ce_base/archive/2007/01/15/replacing-a-coredll-component-in-yamazaki.aspx) เพื่อแทนที่ showerr ใน coredll แต่ เพจเก่าและไม่มีภาพหน้าจออีกต่อไป

ฉันพยายามทำเช่นเดียวกันกับ memcpy แต่ฉันติดอยู่โดยไม่มีภาพหน้าจอทั้งหมด

ปัญหาที่สองคือ: ฉันต้องทำสิ่งต่าง ๆ เพิ่มเติมเพื่อคัดลอกข้อมูลบางส่วนหรือโค้ดแอสเซมเบลอร์เหล่านี้เพียงพอหรือไม่:

NEONCopyPLD
      PLD [r1, #0xC0]
      VLDM r1!,{d0-d7}
      VSTM r0!,{d0-d7}
      SUBS r2,r2,#0x40
      BGE NEONCopyPLD

อาจมีคนเคยทำแบบเดียวกันมาก่อนหรือรู้วิธีเปลี่ยนรหัส memcpy

ขอแสดงความนับถือเจนส์


person Jens S    schedule 01.09.2014    source แหล่งที่มา
comment
ในส่วนหลัง ลองใช้โค้ดนั้นเพื่อ memcpy 17 ไบต์ลงในบัฟเฟอร์บนสแต็กแล้วดูว่าเกิดอะไรขึ้น... ;)   -  person Notlikethat    schedule 02.09.2014
comment
NEON memcpy ของฉันมีความยาว 344 บรรทัด :)   -  person Jake 'Alquimista' LEE    schedule 02.09.2014


คำตอบ (2)


รหัสของคุณอาจจะเสียหายเนื่องจากข้อผิดพลาดในการจัดตำแหน่ง

คุณควรใช้ vld1.8 และ vst1.8 แทนเพื่อหลีกเลี่ยงปัญหานี้

นอกจากนี้ คุณควรตรวจสอบขนาดและเงื่อนไขการจัดตำแหน่งที่จุดเริ่มต้นและแยกไปยังส่วนที่ปรับให้เหมาะสมแต่ละรายการ

สุดท้ายแต่ไม่ท้ายสุด จัดตำแหน่งปลายทางเป็น 64 ไบต์ และคัดลอก 64 ไบต์ต่อการวนซ้ำเพื่อให้ได้ปริมาณข้อมูลสูงสุด

ไม่ใช่ NEON ที่คุณต้องการความรู้ แต่เป็นการควบคุมโฟลว์ผ่าน ARM และพฤติกรรมแคช

person Jake 'Alquimista' LEE    schedule 02.09.2014

คุณอาจสามารถแทนที่ได้ด้วยการสร้าง coredll เวอร์ชันของคุณเองขึ้นมาใหม่ แต่นี่เป็นเรื่องยากและต้องมีความรู้ที่ดีเกี่ยวกับระบบบิลด์ คุณควรพิจารณาด้วยว่า CE 6 จะไม่บันทึกการลงทะเบียน NEON บนสวิตช์บริบทตามค่าเริ่มต้น ซึ่งจะต้องได้รับการสนับสนุนเพิ่มเติมใน BSP อาจอธิบายว่าทำไมคุณถึงต้องการเพิ่มประสิทธิภาพ iper-optimize memcpy บน Windows CE อาจทำให้มีคนแนะนำวิธีแก้ปัญหาที่ดีกว่า

person Valter Minute    schedule 02.09.2014
comment
ใช่ ฉันติดอยู่กับบทช่วยสอนนี้ blogs.msdn.com/b/ce_base/archive/2007/01/15/ ตรงประเด็น คำสั่งที่เราต้องการดำเนินการนั้นง่าย – เราต้องการตั้งค่าสภาพแวดล้อมท้องถิ่น เปลี่ยนเป็น ไดเร็กทอรีที่มีซอร์สไลบรารี "showerr" ใหม่ของเรา และดำเนินการบิลด์ใหม่ทั้งหมด ขั้นตอนเหล่านี้ทำได้สำเร็จโดยใช้คำสั่งที่เราใส่ไว้ในไฟล์แบตช์ของเรา เนื่องจากไม่มีภาพหน้าจอพร้อมข้อมูล เรากำลังทำลายล้างสิ่งต่างๆ มากมายและหวังว่ามันจะทำให้ระบบของเราเร็วขึ้น - person Jens S; 02.09.2014
comment
หากต้องการเพิ่มความเร็วให้กับระบบของคุณ คุณต้องปรับไดรเวอร์จอแสดงผลให้เหมาะสม ไม่ใช่ Memcpy ไม่ได้รับการยอมรับว่าไดรเวอร์การแสดงผลใช้ memcpy เลย หากเป็นโค้ดของคุณเองที่ใช้ memcpy ในการใช้งาน blitting การเปลี่ยนแปลงที่นั่นจะง่ายกว่า การเปลี่ยนพฤติกรรมของฟังก์ชันนี้อาจส่งผลกระทบต่อส่วนอื่น ๆ ของระบบที่มีปัญหาการจัดตำแหน่ง ฯลฯ และอย่างที่ฉันบอกคุณในโพสต์ก่อนหน้า CE6 จะไม่บันทึกการลงทะเบียน NEON บนสวิตช์บริบท - person Valter Minute; 03.09.2014