ยูนิคอร์
Unicore เป็นสถาปัตยกรรม ชุดคำสั่งคอมพิวเตอร์ที่ออกแบบโดยศูนย์วิจัยและพัฒนาไมโครโปรเซสเซอร์ (MPRC) ของมหาวิทยาลัยปักกิ่งในสาธารณรัฐประชาชนจีน คอมพิวเตอร์ที่สร้างขึ้นบนสถาปัตยกรรมนี้เรียกว่าUnity-863 [ 1 ] CPU ถูกรวมเข้ากับ SoC ที่ทำงานได้อย่างสมบูรณ์เพื่อสร้างระบบที่คล้ายกับพีซี[ 2 ]
โปรเซสเซอร์นี้มีความคล้ายคลึงกับสถาปัตยกรรม ARM มาก แต่ใช้ชุดคำสั่งที่แตกต่างกัน[ 3 ]
เคอร์เนล Linuxรองรับตั้งแต่เวอร์ชัน 2.6.39 เป็นต้นไป[ 4 ]แต่ได้ลบการสนับสนุนออกในเคอร์เนล Linuxเวอร์ชัน 5.9 เนื่องจากนักพัฒนาซอฟต์แวร์ระบุว่า "ไม่มีใครดูแลรักษา และโค้ดก็ล้าหลังกว่าโค้ดเคอร์เนลส่วนที่เหลือและความต้องการของคอมไพเลอร์" [ 5 ]
ชุดคำสั่ง
คำสั่งต่างๆ เกือบจะเหมือนกับรูปแบบ ARM มาตรฐาน ยกเว้นว่าการดำเนินการแบบมีเงื่อนไขถูกลบออก และมีการกำหนดบิตใหม่เพื่อขยายตัวระบุรีจิสเตอร์ทั้งหมดเป็น 5 บิต[ 6 ] [ 7 ] ในทำนองเดียวกัน รูปแบบค่าคงที่คือ 9 บิตที่หมุนด้วยจำนวน 5 บิต (แทนที่จะเป็น 8 บิตที่หมุนด้วย 4 บิต) ขนาดออฟเซ็ตการโหลด/จัดเก็บคือ 14 บิตสำหรับไบต์/เวิร์ด และ 10 บิตสำหรับไบต์แบบมีเครื่องหมายหรือครึ่งเวิร์ด การย้ายแบบมีเงื่อนไขทำได้โดยการเข้ารหัสเงื่อนไขในฟิลด์รีจิสเตอร์แหล่งที่มาที่สอง (ที่ ARM ไม่ได้ใช้) Rn สำหรับคำสั่ง MOV และ MVN
31 | 30 | 29 | 28 | 27 | 26 | 25 | 24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | คำอธิบาย |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | โอเปอเรเตอร์โค้ด | เอส | อาร์เอ็น | ถนน | กะ | 0 | ช | 0 | ห้อง | การทำงานของ ALU, Rd = Rn op Rm shift #shift | ||||||||||||||||||||
| 0 | 0 | 0 | โอเปอเรเตอร์โค้ด | เอส | อาร์เอ็น | ถนน | รูปี | 0 | ช | 1 | ห้อง | การทำงานของ ALU, Rd = Rn op Rm shift Rs | ||||||||||||||||||||
| 0 | 0 | 1 | โอเปอเรเตอร์โค้ด | เอส | อาร์เอ็น | ถนน | กะ | อิมม์9 | การทำงานของ ALU, Rd = Rn op #imm9 ROTL #shift | |||||||||||||||||||||||
| 0 | 1 | 0 | พี | ยู | บี | ว | แอล | อาร์เอ็น | ถนน | กะ | 0 | ช | 0 | ห้อง | โหลด/จัดเก็บ Rd ไปยังที่อยู่ Rn ± Rm กะ #shift | |||||||||||||||||
| 0 | 1 | 1 | พี | ยู | บี | ว | แอล | อาร์เอ็น | ถนน | ออฟเซ็ต14 | โหลด/จัดเก็บ Rd ไปยังที่อยู่ Rn ± ออฟเซ็ต 14 | |||||||||||||||||||||
| 1 | 0 | 0 | พี | ยู | เอส | ว | แอล | อาร์เอ็น | บิตแมปสูง | 0 | 0 | ชม | บิตแมปต่ำ | โหลด/บันทึกข้อมูลลงในรีจิสเตอร์หลายตัว | ||||||||||||||||||
| 1 | 0 | 1 | เงื่อนไข | แอล | ออฟเซ็ต 24 | แยกสาขา (และเชื่อมโยง) หากเงื่อนไขเป็นจริง | ||||||||||||||||||||||||||
| 1 | 1 | 0 | คำสั่งโคโปรเซสเซอร์ (FPU) | |||||||||||||||||||||||||||||
| 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | หมายเลขกับดัก | การขัดจังหวะซอฟต์แวร์ | |||||||||||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | เอ | เอส | อาร์เอ็น | ถนน | รูปี | 1 | 0 | 0 | 1 | ห้อง | คูณ, Rd = Rm * Rs (+ Rn) | ||||||||||||||||
| 0 | 0 | 0 | 1 | 0 | 0 | 0 | แอล | 11111 | 11111 | 00000 | 1 | 0 | 0 | 1 | ห้อง | สาขาและศูนย์แลกเปลี่ยน (BX, BLX) | ||||||||||||||||
| 0 | 1 | 0 | พี | ยู | 0 | ว | แอล | อาร์เอ็น | ถนน | 00000 | 1 | เอส | ชม | 1 | ห้อง | โหลด/จัดเก็บ Rd ไปยังแอดเดรส Rn ± Rm (16 บิต) | ||||||||||||||||
| 0 | 1 | 0 | พี | ยู | 1 | ว | แอล | อาร์เอ็น | ถนน | อิมม์_ฮิ | 1 | เอส | ชม | 1 | อิมม์_โล | โหลด/จัดเก็บ Rd ไปยังแอดเดรส Rn ± #imm10 (16 บิต) | ||||||||||||||||
ความหมายของบิตแฟล็กต่างๆ (เช่น S=1 เปิดใช้งานการตั้งค่ารหัสเงื่อนไข) นั้นเหมือนกับชุดคำสั่ง ARM คำสั่งโหลด/จัดเก็บหลายรายการสามารถเข้าถึงได้เพียงครึ่งหนึ่งของชุดรีจิสเตอร์ ขึ้นอยู่กับบิต H ถ้า H=0 บิตทั้ง 16 บิตจะระบุ R0–R15 ถ้า H=1 จะระบุ R16–R31