@@ -314,6 +314,7 @@ type signed = Sign.t
314314type 'k kinstruction =
315315 | INop
316316 | Ret
317+ | Li of reg * Int64 .t
317318 | OpI of opi * reg * reg * 'k
318319 | OpI2 of opi2 * reg * 'k
319320 | OpA of opa * reg * lbl
@@ -348,6 +349,7 @@ type 'k basic_pp = { pp_k : 'k -> string; is_zero : 'k -> bool }
348349let do_pp_instruction m = function
349350 | INop -> " nop"
350351 | Ret -> " ret"
352+ | Li (r ,k ) -> sprintf " li %s,%Li" (pp_reg r) k
351353 (* MV is a pseudoinstruction - special case of ADDI*)
352354 | OpI (ADDI, r1 ,r2 ,k ) when m.is_zero k ->
353355 sprintf " mv %s,%s" (pp_reg r1) (pp_reg r2)
@@ -430,6 +432,7 @@ let fold_regs (f_reg,f_sreg) =
430432
431433 fun c ins -> match ins with
432434 | INop |Ret |J _ | FenceIns _ -> c
435+ | Li (r1,_)
433436 | OpA (_ ,r1 ,_ ) | AUIPC (r1 ,_ ) | OpI2 (_ ,r1 ,_ ) -> fold_reg r1 c
434437 | OpI (_,r1,r2,_) | OpIW (_,r1,r2,_)
435438 | Bcc (_,r1,r2,_)
@@ -451,6 +454,7 @@ let map_regs f_reg f_symb =
451454
452455 function ins -> match ins with
453456 | INop |Ret |J _ | FenceIns _ -> ins
457+ | Li (r ,k ) -> Li (map_reg r,k)
454458 | OpI (op ,r1 ,r2 ,k ) ->
455459 OpI (op,map_reg r1,map_reg r2,k)
456460 | OpI2 (op ,r1 ,k ) ->
@@ -488,7 +492,7 @@ let map_addrs _f ins = ins
488492let get_next = function
489493 | J lbl -> [Label. To lbl;]
490494 | Bcc (_ ,_ ,_ ,lbl ) -> [Label. Next ; Label. To lbl;]
491- | INop | Ret | OpI (_, _, _, _)| OpIW (_, _, _, _)| Op (_, _, _, _)| OpW (_, _, _, _) | OpA (_,_,_) | AUIPC (_,_)
495+ | INop | Ret | Li _ | OpI (_, _, _, _)| OpIW (_, _, _, _)| Op (_, _, _, _)| OpW (_, _, _, _) | OpA (_,_,_) | AUIPC (_,_)
492496 | OpI2 (_,_,_)
493497 | Load (_,_, _, _, _, _)| Store (_,_, _, _, _)| LoadReserve (_, _, _, _)
494498 | StoreConditional (_, _, _, _, _)| FenceIns _| Amo _| Ext (_,_,_,_)
@@ -510,7 +514,7 @@ include Pseudo.Make
510514 | OpIW (op ,r1 ,r2 ,k ) -> OpIW (op,r1,r2,k_tr k)
511515 | AUIPC (r1 , k ) -> AUIPC (r1,k_tr k)
512516 | Op (_, _, _, _)| OpW (_, _, _, _)| J _| Bcc (_, _, _, _)
513- | INop | Ret | OpA (_,_,_)
517+ | INop | Ret | Li _ | OpA (_,_,_)
514518 | Load (_, _, _, _, _, _)| Store (_, _ ,_ , _, _)
515519 | Ext (_,_,_,_)
516520 | LoadReserve (_, _, _, _)| StoreConditional (_, _, _, _, _)| Amo _| FenceIns _
@@ -524,6 +528,7 @@ include Pseudo.Make
524528 | Amo _ -> 2
525529 | INop
526530 | Ret
531+ | Li _
527532 | OpI (_, _, _, _)| OpIW (_, _, _, _)| Op (_, _, _, _)
528533 | OpI2 (_,_,_)
529534 | OpA (_,_,_) | AUIPC (_,_) | Ext (_,_,_,_)
@@ -538,6 +543,7 @@ include Pseudo.Make
538543 -> f k lbl
539544 | INop
540545 | Ret
546+ | Li _
541547 | OpI (_, _, _, _)| OpIW (_, _, _, _)| Op (_, _, _, _) | AUIPC (_,_)
542548 | OpI2 (_,_,_)
543549 | OpW (_, _, _, _)| Load (_, _, _, _, _, _)| Store (_, _, _, _, _)
@@ -550,6 +556,7 @@ include Pseudo.Make
550556 | OpA (op ,r1 ,lbl ) -> OpA (op,r1,BranchTarget. as_string_fun f lbl)
551557 | INop
552558 | Ret
559+ | Li _
553560 | OpI (_, _, _, _)| OpIW (_, _, _, _)| Op (_, _, _, _)
554561 | OpI2 (_,_,_)
555562 | OpW (_, _, _, _)| Load _| Store _| AUIPC (_,_)
0 commit comments