Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- code64
- processor cpu64_v8 +cpu64_fp +CPU64_SIMD
- format binary as 'img'
- org $0000
- ; N64 MIPS 4300 CPU Scalar Instructions (CPU):
- ;-------------------------------
- ; ARM64 CPU | MIPS64 CPU
- ;-------------------------------
- nop ; nop
- smc $EEDD ; syscall $FEEDD
- brk $EEDD ; break $FEEDD
- nop ; sync
- lsl w0,w30,1 ; sll r1,ra,1
- lsr w0,w30,1 ; srl r1,ra,1
- asr w0,w30,1 ; sra r1,ra,1
- lslv w0,w30,w1 ; sllv r1,ra,r2
- lsrv w0,w30,w1 ; srlv r1,ra,r2
- asrv w0,w30,w1 ; srav r1,ra,r2
- nop ; mfhi r1 ** Previous MUL/DIV Instruction Encodes lo/hi **
- nop ; mthi r1 ** Check **
- nop ; mflo r1 ** Previous MUL/DIV Instruction Encodes lo/hi **
- nop ; mtlo r1 ** Check **
- lslv x0,x30,x1 ; dsllv r1,ra,r2
- lsrv x0,x30,x1 ; dsrlv r1,ra,r2
- asrv x0,x30,x1 ; dsrav r1,ra,r2
- lsl x0,x30,1 ; dsll r1,ra,1
- lsr x0,x30,1 ; dsrl r1,ra,1
- asr x0,x30,1 ; dsra r1,ra,1
- lsl x0,x30,33 ; dsll32 r1,ra,1
- lsr x0,x30,33 ; dsrl32 r1,ra,1
- asr x0,x30,33 ; dsra32 r1,ra,1
- madd w0,w0,w30,wzr ; mult r1,ra
- madd w0,w0,w30,wzr ; multu r1,ra ** Check **
- sdiv w0,w0,w30 ; div r1,ra
- udiv w0,w0,w30 ; divu r1,ra
- madd x0,x0,x30,xzr ; dmult r1,ra
- madd x0,x0,x30,xzr ; dmultu r1,ra ** Check **
- sdiv x0,x0,x30 ; ddiv r1,ra
- udiv x0,x0,x30 ; ddivu r1,ra
- add w0,w30,w1 ; add r1,ra,r2
- add w0,w30,w1 ; addu r1,ra,r2 ** Check **
- sub w0,w30,w1 ; sub r1,ra,r2
- sub w0,w30,w1 ; subu r1,ra,r2 ** Check **
- and w0,w30,w1 ; and r1,ra,r2
- orr w0,w30,w1 ; or r1,ra,r2
- eor w0,w30,w1 ; xor r1,ra,r2
- orn w0,w30,w1 ; nor r1,ra,r2
- nop ; slt r1,ra,r2 ** Check **
- nop ; sltu r1,ra,r2 ** Check **
- add x0,x30,x1 ; dadd r1,ra,r2
- add x0,x30,x1 ; daddu r1,ra,r2 ** Check **
- sub x0,x30,x1 ; dsub r1,ra,r2
- sub x0,x30,x1 ; dsubu r1,ra,r2 ** Check **
- nop ; tge r1,ra,$3FF ** Trap Exception **
- nop ; tge r1,$3FF
- nop ; tgeu r1,ra,$3FF
- nop ; tgeu r1,$3FF
- nop ; tlt r1,ra,$3FF
- nop ; tlt r1,$3FF
- nop ; tltu r1,ra,$3FF
- nop ; tltu r1,$3FF
- nop ; teq r1,ra,$3FF
- nop ; teq r1,$3FF
- nop ; tne r1,ra,$3FF
- BLTZ:
- nop ; tne r1,$3FF
- BGEZ: ; ** Branch **
- b.lt BLTZ ; bltz r1,BLTZ
- BLTZL:
- b.ge BGEZ ; bgez r1,BGEZ
- BGEZL:
- b.lt BLTZL ; bltzl r1,BLTZL
- BLTZAL:
- b.ge BGEZL ; bgezl r1,BGEZL
- BGEZAL:
- b.lt BLTZAL ; bltzal r1,BLTZAL
- BLTZALL:
- b.ge BGEZAL ; bgezal r1,BGEZAL
- BGEZALL:
- b.lt BLTZALL ; bltzall r1,BLTZALL
- BLEZ:
- b.ge BGEZALL ; bgezall r1,BGEZALL
- BGTZ:
- b.le BLEZ ; blez r1,BLEZ
- BLEZL:
- b.gt BGTZ ; bgtz r1,BGTZ
- BGTZL:
- b.le BLEZL ; blezl r1,BLEZL
- BEQTEST:
- b.gt BGTZL ; bgtzl r1,BGTZL
- BNETEST:
- cbz w0,BEQTEST ; beq r1,r1,BEQTEST
- BEQL:
- cbnz w0,BNETEST ; bne r1,r1,BNETEST
- BNEL:
- cbz w0,BEQL ; beql r1,r1,BEQL
- cbnz w0,BNEL ; bnel r1,r1,BNEL
- J: ; ** Jump **
- b J ; j J
- JAL:
- bl JAL ; jal JAL
- br x0 ; jr r1
- blr x0 ; jalr r1
- blr x0 ; jalr ra,r1 ** Check **
- nop ; tgei r1,$FFEE ** Trap Exception **
- nop ; tgeiu r1,$FFEE
- nop ; tlti r1,$FFEE
- nop ; tltiu r1,$FFEE
- nop ; teqi r1,$FFEE
- nop ; tnei r1,$FFEE
- add w0,w30,-18 ; addi r1,ra,$FFEE
- add w0,w30,-18 ; addiu r1,ra,$FFEE ** Check **
- nop ; slti r1,ra,$FFEE ** Check **
- nop ; sltiu r1,ra,$FFEE ** Check **
- and w0,w30,$FFE ; andi r1,ra,$FFEE ** Check **
- orr w0,w30,$FFE ; ori r1,ra,$FFEE ** Check **
- eor w0,w30,$FFE ; xori r1,ra,$FFEE ** Check **
- add x0,x30,-18 ; daddi r1,ra,$FFEE
- BC0F:
- add x0,x30,-18 ; daddiu r1,ra,$FFEE ** Check **
- ; N64 MIPS 4300 CPU Branch On Coprocessor Instructions (COPz):
- ;----------------------------
- ; ARM64 COP | MIPS64 COP
- ;----------------------------
- ;BC1F:
- ; ; bc0f BC0F
- ;BC0T:
- ; ; bc1f BC1F
- ;BC1T:
- ; ; bc0t BC0T
- ;BC0FL:
- ; ; bc1t BC1T
- ;BC1FL:
- ; ; bc0fl BC0FL
- ;BC0TL:
- ; ; bc1fl BC1FL
- ;BC1TL:
- ; ; bc0tl BC0TL
- ; ; bc1tl BC1TL
- ; ARM64 CPU Scalar Load Instructions (CPU):
- ;---------------------------------
- ; ARM64 CPU | MIPS64 CPU
- ;---------------------------------
- movk w0,$FFEE,lsl 16 ; lui r1,$FFEE
- ; ; ldl r1,$FFEE(ra)
- ; ; ldr r1,$FFEE(ra)
- ldrsb w0,[x30-18] ; lb r1,$FFEE(ra)
- ldrsh w0,[x30-18] ; lh r1,$FFEE(ra)
- ; ; lwl r1,$FFEE(ra)
- ldr w0,[x30-18] ; lw r1,$FFEE(ra)
- ldrb w0,[x30-18] ; lbu r1,$FFEE(ra)
- ldrh w0,[x30-18] ; lhu r1,$FFEE(ra)
- ; ; lwr r1,$FFEE(ra)
- ; ; lwu r1,$FFEE(ra)
- ; ; ll r1,$FFEE(ra)
- ; ; lwc1 f1,$FFEE(ra)
- ; ; lld r1,$FFEE(ra)
- ; ; ldc1 f1,$FFEE(ra)
- ldr x0,[x30-18] ; ld r1,$FFEE(ra)
- ; ARM64 CPU Scalar Store Instructions (CPU):
- ;-----------------------------
- ; ARM64 CPU | MIPS64 CPU
- ;-----------------------------
- strb w0,[x30-18] ; sb r1,$FFEE(ra)
- strh w0,[x30-18] ; sh r1,$FFEE(ra)
- ; ; swl r1,$FFEE(ra)
- str w0,[x30-18] ; sw r1,$FFEE(ra)
- ; ; sdl r1,$FFEE(ra)
- ; ; sdr r1,$FFEE(ra)
- ; ; swr r1,$FFEE(ra)
- ; ; sc r1,$FFEE(ra)
- ; ; swc1 f1,$FFEE(ra)
- ; ; scd r1,$FFEE(ra)
- ; ; sdc1 f1,$FFEE(ra)
- str x0,[x30-18] ; sd r1,$FFEE(ra)
- ; ; cache r1,$FFEE(ra)
- ; ARM64 Control Instructions (COP0):
- ;-----------------------------
- ; ARM64 COP | MIPS64 COP
- ;-----------------------------
- ; ; mfc0 r1,ra
- ; ; dmfc0 r1,ra
- ; ; mtc0 r1,ra
- ; ; dmtc0 r1,ra
- ; ARM64 Control Instructions (COP1):
- ;-----------------------------
- ; ARM64 COP | MIPS64 COP
- ;-----------------------------
- ; ; mfc1 r1,f31
- ; ; dmfc1 r1,f31
- ; ; cfc1 r1,f31
- ; ; mtc1 r1,f31
- ; ; dmtc1 r1,f31
- ; ; ctc1 r1,f31
- ; ; tlbr
- ; ; tlbwi
- ; ; tlbwr
- ; ; tlbp
- ; ; rfe
- ; ; eret
- ; ; cop0 $1FFEEDD
- ; ; cop1 $1FFEEDD
- ; ARM64 Floating Point Unit (FPU) Instructions:
- ;---------------------------
- ; ARM64 FPU | MIPS64 FPU
- ;---------------------------
- fadd s1,s31,s2 ; add.s f1,f31,f2
- fadd d1,d31,d2 ; add.d f1,f31,f2
- fsub s1,s31,s2 ; sub.s f1,f31,f2
- fsub d1,d31,d2 ; sub.d f1,f31,f2
- fmul s1,s31,s2 ; mul.s f1,f31,f2
- fmul d1,d31,d2 ; mul.d f1,f31,f2
- fdiv s1,s31,s2 ; div.s f1,f31,f2
- fdiv d1,d31,d2 ; div.d f1,f31,f2
- fsqrt s1,s31 ; sqrt.s f1,f31
- fsqrt d1,d31 ; sqrt.d f1,f31
- fabs s1,s31 ; abs.s f1,f31
- fabs d1,d31 ; abs.d f1,f31
- fmov s1,s31 ; mov.s f1,f31
- fmov d1,d31 ; mov.d f1,f31
- fneg s1,s31 ; neg.s f1,f31
- fneg d1,d31 ; neg.d f1,f31
- ; ; round.l.s f1,f31
- ; ; round.l.d f1,f31
- ; ; trunc.l.s f1,f31
- ; ; trunc.l.d f1,f31
- ; ; ceil.l.s f1,f31
- ; ; ceil.l.d f1,f31
- ; ; floor.l.s f1,f31
- ; ; floor.l.d f1,f31
- ; ; round.w.s f1,f31
- ; ; round.w.d f1,f31
- ; ; trunc.w.s f1,f31
- ; ; trunc.w.d f1,f31
- ; ; ceil.w.s f1,f31
- ; ; ceil.w.d f1,f31
- ; ; floor.w.s f1,f31
- ; ; floor.w.d f1,f31
- fcvt d1,s31 ; cvt.s.d f1,f31
- fcvtzs w1,s31 ; cvt.s.w f1,f31
- fcvtzs x1,s31 ; cvt.s.l f1,f31
- fcvt s1,d31 ; cvt.d.s f1,f31
- fcvtzs w1,d31 ; cvt.d.w f1,f31
- fcvtzs x1,d31 ; cvt.d.l f1,f31
- scvtf s1,w30 ; cvt.w.s f1,f31
- scvtf d1,w30 ; cvt.w.d f1,f31
- scvtf s1,x30 ; cvt.l.s f1,f31
- scvtf d1,x30 ; cvt.l.d f1,f31
- ; ; c.f.s f1,f31
- ; ; c.f.d f1,f31
- ; ; c.un.s f1,f31
- ; ; c.un.d f1,f31
- ; ; c.eq.s f1,f31
- ; ; c.eq.d f1,f31
- ; ; c.ueq.s f1,f31
- ; ; c.ueq.d f1,f31
- ; ; c.olt.s f1,f31
- ; ; c.olt.d f1,f31
- ; ; c.ult.s f1,f31
- ; ; c.ult.d f1,f31
- ; ; c.ole.s f1,f31
- ; ; c.ole.d f1,f31
- ; ; c.ule.s f1,f31
- ; ; c.ule.d f1,f31
- ; ; c.sf.s f1,f31
- ; ; c.sf.d f1,f31
- ; ; c.ngle.s f1,f31
- ; ; c.ngle.d f1,f31
- ; ; c.seq.s f1,f31
- ; ; c.seq.d f1,f31
- ; ; c.ngl.s f1,f31
- ; ; c.ngl.d f1,f31
- ; ; c.lt.s f1,f31
- ; ; c.lt.d f1,f31
- ; ; c.nge.s f1,f31
- ; ; c.nge.d f1,f31
- ; ; c.le.s f1,f31
- ; ; c.le.d f1,f31
- ; ; c.ngt.s f1,f31
- ; ; c.ngt.d f1,f31
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement