ตามค่าเริ่มต้น เมื่อมีการใช้คําสั่งแบบกําหนดเอง ค่าคงที่ของจุดลอยตัวจะถูกคอมไพล์เป็นการดําเนินการจุดลอยตัวที่มีความแม่นยําเดียวและความแม่นยําเดียวจะถูกนําไปใช้ในฮาร์ดแวร์ การแก้ไขปัญหาต่อไปนี้จะบังคับให้ค่าคงที่ของจุดลอยตัวถูกคอมไพล์เป็นการดําเนินการจุดลอยตัวที่มีความแม่นยําสองเท่าและมีความแม่นยําสองเท่าในซอฟต์แวร์
คุณสามารถใช้วิธีแก้ไขปัญหาใดวิธีหนึ่งต่อไปนี้ :
ทางเลือกที่ 1 - ปรับเปลี่ยนซอฟต์แวร์ของคุณด้วยการเพิ่ม postfix "L" ไปยังค่าคงที่จุดลอยตัวแบบสองความแม่นยําเพื่อให้แน่ใจว่าค่าคงที่ไม่ได้รับการแปลงเป็นความแม่นยําเดียว
ตารางต่อไปนี้แสดงตัวอย่างโค้ดและจุดลอยตัวการใช้งานฮาร์ดแวร์คําสั่งแบบกําหนดเอง ความแม่นยํา และว่าการใช้งานอยู่ในฮาร์ดแวร์หรือซอฟต์แวร์
รหัสตัวอย่าง | การใช้งาน FP CI | แม่นยำ | การนําไปใช้ |
b= a * 4.67 | ใช่ | เดียว | ฮาร์ดแวร์ |
b = a * 4.67 | ไม่ใช่ | คู่ | ซอฟต์แวร์ |
b = a * 4.67f | ใช่ | เดียว | ฮาร์ดแวร์ |
b = a * 4.67f | ไม่ใช่ | เดียว | ซอฟต์แวร์ |
b = a * 4.67L | ไม่ต้องสนใจ* | คู่ | ซอฟต์แวร์ |
ทางเลือกที่ 2 - ใน public.mk ให้ถอดแฟลก -mcustom-fpu-config ออกด้วยตนเองและแทนที่ด้วยแฟล็กคอมไพเลอร์แต่ละตัว แต่ไม่ใช้แฟลก -fsingle-precision-constant
"-mcustom-fpu-config=60-1" ไปยัง "-mcustom-fmuls=252 –mcustom-fads=253 –mcustom-fsubs=254" หรือ
"-mcustom-fpu-config=60-2" ไปยัง "-mcustom-fmuls=252 –mcustom-fads=253 –mcustom-fsubs=254 –mcustom-divs=255"
โปรดทราบว่าความแตกต่างระหว่าง 60-1 และ 60-2 คือ 60-1 ไม่มีแฟลก –mcustom-divs
หากต้องการทราบรายละเอียดเพิ่มเติม โปรดดูภาคผนวก D in http://www.altera.com/literature/ug/ug_nios2_custom_instruction.pdf