2 * This file is subject to the terms and conditions of the GNU General Public
3 * License. See the file "COPYING" in the main directory of this archive
6 * A small micro-assembler. It is intentionally kept simple, does only
7 * support a subset of instructions, and does not try to hide pipeline
8 * effects like branch delay slots.
10 * Copyright (C) 2004, 2005, 2006, 2008 Thiemo Seufer
11 * Copyright (C) 2005, 2007 Maciej W. Rozycki
12 * Copyright (C) 2006 Ralf Baechle (ralf@linux-mips.org)
15 #include <linux/kernel.h>
16 #include <linux/types.h>
17 #include <linux/init.h>
48 #define IMM_MASK 0xffff
50 #define JIMM_MASK 0x3ffffff
52 #define FUNC_MASK 0x3f
59 insn_addu
, insn_addiu
, insn_and
, insn_andi
, insn_beq
,
60 insn_beql
, insn_bgez
, insn_bgezl
, insn_bltz
, insn_bltzl
,
61 insn_bne
, insn_daddu
, insn_daddiu
, insn_dmfc0
, insn_dmtc0
,
62 insn_dsll
, insn_dsll32
, insn_dsra
, insn_dsrl
, insn_dsrl32
,
63 insn_dsubu
, insn_eret
, insn_j
, insn_jal
, insn_jr
, insn_ld
,
64 insn_ll
, insn_lld
, insn_lui
, insn_lw
, insn_mfc0
, insn_mtc0
,
65 insn_ori
, insn_rfe
, insn_sc
, insn_scd
, insn_sd
, insn_sll
,
66 insn_sra
, insn_srl
, insn_subu
, insn_sw
, insn_tlbp
, insn_tlbwi
,
67 insn_tlbwr
, insn_xor
, insn_xori
76 /* This macro sets the non-variable bits of an instruction. */
77 #define M(a, b, c, d, e, f) \
85 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
86 static struct insn insn_table
[] __initdata
= {
88 static struct insn insn_table
[] __cpuinitdata
= {
89 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
90 { insn_addiu
, M(addiu_op
, 0, 0, 0, 0, 0), RS
| RT
| SIMM
},
91 { insn_addu
, M(spec_op
, 0, 0, 0, 0, addu_op
), RS
| RT
| RD
},
92 { insn_and
, M(spec_op
, 0, 0, 0, 0, and_op
), RS
| RT
| RD
},
93 { insn_andi
, M(andi_op
, 0, 0, 0, 0, 0), RS
| RT
| UIMM
},
94 { insn_beq
, M(beq_op
, 0, 0, 0, 0, 0), RS
| RT
| BIMM
},
95 { insn_beql
, M(beql_op
, 0, 0, 0, 0, 0), RS
| RT
| BIMM
},
96 { insn_bgez
, M(bcond_op
, 0, bgez_op
, 0, 0, 0), RS
| BIMM
},
97 { insn_bgezl
, M(bcond_op
, 0, bgezl_op
, 0, 0, 0), RS
| BIMM
},
98 { insn_bltz
, M(bcond_op
, 0, bltz_op
, 0, 0, 0), RS
| BIMM
},
99 { insn_bltzl
, M(bcond_op
, 0, bltzl_op
, 0, 0, 0), RS
| BIMM
},
100 { insn_bne
, M(bne_op
, 0, 0, 0, 0, 0), RS
| RT
| BIMM
},
101 { insn_daddiu
, M(daddiu_op
, 0, 0, 0, 0, 0), RS
| RT
| SIMM
},
102 { insn_daddu
, M(spec_op
, 0, 0, 0, 0, daddu_op
), RS
| RT
| RD
},
103 { insn_dmfc0
, M(cop0_op
, dmfc_op
, 0, 0, 0, 0), RT
| RD
| SET
},
104 { insn_dmtc0
, M(cop0_op
, dmtc_op
, 0, 0, 0, 0), RT
| RD
| SET
},
105 { insn_dsll
, M(spec_op
, 0, 0, 0, 0, dsll_op
), RT
| RD
| RE
},
106 { insn_dsll32
, M(spec_op
, 0, 0, 0, 0, dsll32_op
), RT
| RD
| RE
},
107 { insn_dsra
, M(spec_op
, 0, 0, 0, 0, dsra_op
), RT
| RD
| RE
},
108 { insn_dsrl
, M(spec_op
, 0, 0, 0, 0, dsrl_op
), RT
| RD
| RE
},
109 { insn_dsrl32
, M(spec_op
, 0, 0, 0, 0, dsrl32_op
), RT
| RD
| RE
},
110 { insn_dsubu
, M(spec_op
, 0, 0, 0, 0, dsubu_op
), RS
| RT
| RD
},
111 { insn_eret
, M(cop0_op
, cop_op
, 0, 0, 0, eret_op
), 0 },
112 { insn_j
, M(j_op
, 0, 0, 0, 0, 0), JIMM
},
113 { insn_jal
, M(jal_op
, 0, 0, 0, 0, 0), JIMM
},
114 { insn_jr
, M(spec_op
, 0, 0, 0, 0, jr_op
), RS
},
115 { insn_ld
, M(ld_op
, 0, 0, 0, 0, 0), RS
| RT
| SIMM
},
116 { insn_ll
, M(ll_op
, 0, 0, 0, 0, 0), RS
| RT
| SIMM
},
117 { insn_lld
, M(lld_op
, 0, 0, 0, 0, 0), RS
| RT
| SIMM
},
118 { insn_lui
, M(lui_op
, 0, 0, 0, 0, 0), RT
| SIMM
},
119 { insn_lw
, M(lw_op
, 0, 0, 0, 0, 0), RS
| RT
| SIMM
},
120 { insn_mfc0
, M(cop0_op
, mfc_op
, 0, 0, 0, 0), RT
| RD
| SET
},
121 { insn_mtc0
, M(cop0_op
, mtc_op
, 0, 0, 0, 0), RT
| RD
| SET
},
122 { insn_ori
, M(ori_op
, 0, 0, 0, 0, 0), RS
| RT
| UIMM
},
123 { insn_rfe
, M(cop0_op
, cop_op
, 0, 0, 0, rfe_op
), 0 },
124 { insn_sc
, M(sc_op
, 0, 0, 0, 0, 0), RS
| RT
| SIMM
},
125 { insn_scd
, M(scd_op
, 0, 0, 0, 0, 0), RS
| RT
| SIMM
},
126 { insn_sd
, M(sd_op
, 0, 0, 0, 0, 0), RS
| RT
| SIMM
},
127 { insn_sll
, M(spec_op
, 0, 0, 0, 0, sll_op
), RT
| RD
| RE
},
128 { insn_sra
, M(spec_op
, 0, 0, 0, 0, sra_op
), RT
| RD
| RE
},
129 { insn_srl
, M(spec_op
, 0, 0, 0, 0, srl_op
), RT
| RD
| RE
},
130 { insn_subu
, M(spec_op
, 0, 0, 0, 0, subu_op
), RS
| RT
| RD
},
131 { insn_sw
, M(sw_op
, 0, 0, 0, 0, 0), RS
| RT
| SIMM
},
132 { insn_tlbp
, M(cop0_op
, cop_op
, 0, 0, 0, tlbp_op
), 0 },
133 { insn_tlbwi
, M(cop0_op
, cop_op
, 0, 0, 0, tlbwi_op
), 0 },
134 { insn_tlbwr
, M(cop0_op
, cop_op
, 0, 0, 0, tlbwr_op
), 0 },
135 { insn_xor
, M(spec_op
, 0, 0, 0, 0, xor_op
), RS
| RT
| RD
},
136 { insn_xori
, M(xori_op
, 0, 0, 0, 0, 0), RS
| RT
| UIMM
},
137 { insn_invalid
, 0, 0 }
142 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
143 static inline __init u32
build_rs(u32 arg
)
145 static inline __cpuinit u32
build_rs(u32 arg
)
146 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
149 printk(KERN_WARNING
"Micro-assembler field overflow\n");
151 return (arg
& RS_MASK
) << RS_SH
;
154 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
155 static inline __init u32
build_rt(u32 arg
)
157 static inline __cpuinit u32
build_rt(u32 arg
)
158 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
161 printk(KERN_WARNING
"Micro-assembler field overflow\n");
163 return (arg
& RT_MASK
) << RT_SH
;
166 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
167 static inline __init u32
build_rd(u32 arg
)
169 static inline __cpuinit u32
build_rd(u32 arg
)
170 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
173 printk(KERN_WARNING
"Micro-assembler field overflow\n");
175 return (arg
& RD_MASK
) << RD_SH
;
178 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
179 static inline __init u32
build_re(u32 arg
)
181 static inline __cpuinit u32
build_re(u32 arg
)
182 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
185 printk(KERN_WARNING
"Micro-assembler field overflow\n");
187 return (arg
& RE_MASK
) << RE_SH
;
190 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
191 static inline __init u32
build_simm(s32 arg
)
193 static inline __cpuinit u32
build_simm(s32 arg
)
194 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
196 if (arg
> 0x7fff || arg
< -0x8000)
197 printk(KERN_WARNING
"Micro-assembler field overflow\n");
202 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
203 static inline __init u32
build_uimm(u32 arg
)
205 static inline __cpuinit u32
build_uimm(u32 arg
)
206 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
209 printk(KERN_WARNING
"Micro-assembler field overflow\n");
211 return arg
& IMM_MASK
;
214 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
215 static inline __init u32
build_bimm(s32 arg
)
217 static inline __cpuinit u32
build_bimm(s32 arg
)
218 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
220 if (arg
> 0x1ffff || arg
< -0x20000)
221 printk(KERN_WARNING
"Micro-assembler field overflow\n");
224 printk(KERN_WARNING
"Invalid micro-assembler branch target\n");
226 return ((arg
< 0) ? (1 << 15) : 0) | ((arg
>> 2) & 0x7fff);
229 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
230 static inline __init u32
build_jimm(u32 arg
)
232 static inline __cpuinit u32
build_jimm(u32 arg
)
233 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
235 if (arg
& ~((JIMM_MASK
) << 2))
236 printk(KERN_WARNING
"Micro-assembler field overflow\n");
238 return (arg
>> 2) & JIMM_MASK
;
241 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
242 static inline __init u32
build_func(u32 arg
)
244 static inline __cpuinit u32
build_func(u32 arg
)
245 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
247 if (arg
& ~FUNC_MASK
)
248 printk(KERN_WARNING
"Micro-assembler field overflow\n");
250 return arg
& FUNC_MASK
;
253 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
254 static inline __init u32
build_set(u32 arg
)
256 static inline __cpuinit u32
build_set(u32 arg
)
257 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
260 printk(KERN_WARNING
"Micro-assembler field overflow\n");
262 return arg
& SET_MASK
;
266 * The order of opcode arguments is implicitly left to right,
267 * starting with RS and ending with FUNC or IMM.
269 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
270 static void __init
build_insn(u32
**buf
, enum opcode opc
, ...)
272 static void __cpuinit
build_insn(u32
**buf
, enum opcode opc
, ...)
273 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
275 struct insn
*ip
= NULL
;
280 for (i
= 0; insn_table
[i
].opcode
!= insn_invalid
; i
++)
281 if (insn_table
[i
].opcode
== opc
) {
286 if (!ip
|| (opc
== insn_daddiu
&& r4k_daddiu_bug()))
287 panic("Unsupported Micro-assembler instruction %d", opc
);
292 op
|= build_rs(va_arg(ap
, u32
));
294 op
|= build_rt(va_arg(ap
, u32
));
296 op
|= build_rd(va_arg(ap
, u32
));
298 op
|= build_re(va_arg(ap
, u32
));
299 if (ip
->fields
& SIMM
)
300 op
|= build_simm(va_arg(ap
, s32
));
301 if (ip
->fields
& UIMM
)
302 op
|= build_uimm(va_arg(ap
, u32
));
303 if (ip
->fields
& BIMM
)
304 op
|= build_bimm(va_arg(ap
, s32
));
305 if (ip
->fields
& JIMM
)
306 op
|= build_jimm(va_arg(ap
, u32
));
307 if (ip
->fields
& FUNC
)
308 op
|= build_func(va_arg(ap
, u32
));
309 if (ip
->fields
& SET
)
310 op
|= build_set(va_arg(ap
, u32
));
317 #define I_u1u2u3(op) \
320 build_insn(buf, insn##op, a, b, c); \
323 #define I_u2u1u3(op) \
326 build_insn(buf, insn##op, b, a, c); \
329 #define I_u3u1u2(op) \
332 build_insn(buf, insn##op, b, c, a); \
335 #define I_u1u2s3(op) \
338 build_insn(buf, insn##op, a, b, c); \
341 #define I_u2s3u1(op) \
344 build_insn(buf, insn##op, c, a, b); \
347 #define I_u2u1s3(op) \
350 build_insn(buf, insn##op, b, a, c); \
356 build_insn(buf, insn##op, a, b); \
362 build_insn(buf, insn##op, a, b); \
368 build_insn(buf, insn##op, a); \
374 build_insn(buf, insn##op); \
426 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
427 void __init
uasm_build_label(struct uasm_label
**lab
, u32
*addr
, int lid
)
429 void __cpuinit
uasm_build_label(struct uasm_label
**lab
, u32
*addr
, int lid
)
430 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
437 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
438 int __init
uasm_in_compat_space_p(long addr
)
440 int __cpuinit
uasm_in_compat_space_p(long addr
)
441 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
443 /* Is this address in 32bit compat space? */
445 return (((addr
) & 0xffffffff00000000L
) == 0xffffffff00000000L
);
451 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
452 int __init
uasm_rel_highest(long val
)
454 int __cpuinit
uasm_rel_highest(long val
)
455 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
458 return ((((val
+ 0x800080008000L
) >> 48) & 0xffff) ^ 0x8000) - 0x8000;
464 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
465 int __init
uasm_rel_higher(long val
)
467 int __cpuinit
uasm_rel_higher(long val
)
468 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
471 return ((((val
+ 0x80008000L
) >> 32) & 0xffff) ^ 0x8000) - 0x8000;
477 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
478 int __init
uasm_rel_hi(long val
)
480 int __cpuinit
uasm_rel_hi(long val
)
481 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
483 return ((((val
+ 0x8000L
) >> 16) & 0xffff) ^ 0x8000) - 0x8000;
486 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
487 int __init
uasm_rel_lo(long val
)
489 int __cpuinit
uasm_rel_lo(long val
)
490 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
492 return ((val
& 0xffff) ^ 0x8000) - 0x8000;
495 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
496 void __init
UASM_i_LA_mostly(u32
**buf
, unsigned int rs
, long addr
)
498 void __cpuinit
UASM_i_LA_mostly(u32
**buf
, unsigned int rs
, long addr
)
499 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
501 if (!uasm_in_compat_space_p(addr
)) {
502 uasm_i_lui(buf
, rs
, uasm_rel_highest(addr
));
503 if (uasm_rel_higher(addr
))
504 uasm_i_daddiu(buf
, rs
, rs
, uasm_rel_higher(addr
));
505 if (uasm_rel_hi(addr
)) {
506 uasm_i_dsll(buf
, rs
, rs
, 16);
507 uasm_i_daddiu(buf
, rs
, rs
, uasm_rel_hi(addr
));
508 uasm_i_dsll(buf
, rs
, rs
, 16);
510 uasm_i_dsll32(buf
, rs
, rs
, 0);
512 uasm_i_lui(buf
, rs
, uasm_rel_hi(addr
));
515 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
516 void __init
UASM_i_LA(u32
**buf
, unsigned int rs
, long addr
)
518 void __cpuinit
UASM_i_LA(u32
**buf
, unsigned int rs
, long addr
)
519 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
521 UASM_i_LA_mostly(buf
, rs
, addr
);
522 if (uasm_rel_lo(addr
)) {
523 if (!uasm_in_compat_space_p(addr
))
524 uasm_i_daddiu(buf
, rs
, rs
, uasm_rel_lo(addr
));
526 uasm_i_addiu(buf
, rs
, rs
, uasm_rel_lo(addr
));
530 /* Handle relocations. */
531 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
535 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
536 uasm_r_mips_pc16(struct uasm_reloc
**rel
, u32
*addr
, int lid
)
539 (*rel
)->type
= R_MIPS_PC16
;
544 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
545 static inline void __init
547 static inline void __cpuinit
548 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
549 __resolve_relocs(struct uasm_reloc
*rel
, struct uasm_label
*lab
)
551 long laddr
= (long)lab
->addr
;
552 long raddr
= (long)rel
->addr
;
556 *rel
->addr
|= build_bimm(laddr
- (raddr
+ 4));
560 panic("Unsupported Micro-assembler relocation %d",
565 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
569 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
570 uasm_resolve_relocs(struct uasm_reloc
*rel
, struct uasm_label
*lab
)
572 struct uasm_label
*l
;
574 for (; rel
->lab
!= UASM_LABEL_INVALID
; rel
++)
575 for (l
= lab
; l
->lab
!= UASM_LABEL_INVALID
; l
++)
576 if (rel
->lab
== l
->lab
)
577 __resolve_relocs(rel
, l
);
580 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
584 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
585 uasm_move_relocs(struct uasm_reloc
*rel
, u32
*first
, u32
*end
, long off
)
587 for (; rel
->lab
!= UASM_LABEL_INVALID
; rel
++)
588 if (rel
->addr
>= first
&& rel
->addr
< end
)
592 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
596 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
597 uasm_move_labels(struct uasm_label
*lab
, u32
*first
, u32
*end
, long off
)
599 for (; lab
->lab
!= UASM_LABEL_INVALID
; lab
++)
600 if (lab
->addr
>= first
&& lab
->addr
< end
)
604 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
608 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
609 uasm_copy_handler(struct uasm_reloc
*rel
, struct uasm_label
*lab
, u32
*first
,
610 u32
*end
, u32
*target
)
612 long off
= (long)(target
- first
);
614 memcpy(target
, first
, (end
- first
) * sizeof(u32
));
616 uasm_move_relocs(rel
, first
, end
, off
);
617 uasm_move_labels(lab
, first
, end
, off
);
620 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
621 int __init
uasm_insn_has_bdelay(struct uasm_reloc
*rel
, u32
*addr
)
623 int __cpuinit
uasm_insn_has_bdelay(struct uasm_reloc
*rel
, u32
*addr
)
624 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
626 for (; rel
->lab
!= UASM_LABEL_INVALID
; rel
++) {
627 if (rel
->addr
== addr
628 && (rel
->type
== R_MIPS_PC16
629 || rel
->type
== R_MIPS_26
))
636 /* Convenience functions for labeled branches. */
637 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
641 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
642 uasm_il_bltz(u32
**p
, struct uasm_reloc
**r
, unsigned int reg
, int lid
)
644 uasm_r_mips_pc16(r
, *p
, lid
);
645 uasm_i_bltz(p
, reg
, 0);
648 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
652 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
653 uasm_il_b(u32
**p
, struct uasm_reloc
**r
, int lid
)
655 uasm_r_mips_pc16(r
, *p
, lid
);
659 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
663 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
664 uasm_il_beqz(u32
**p
, struct uasm_reloc
**r
, unsigned int reg
, int lid
)
666 uasm_r_mips_pc16(r
, *p
, lid
);
667 uasm_i_beqz(p
, reg
, 0);
670 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
674 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
675 uasm_il_beqzl(u32
**p
, struct uasm_reloc
**r
, unsigned int reg
, int lid
)
677 uasm_r_mips_pc16(r
, *p
, lid
);
678 uasm_i_beqzl(p
, reg
, 0);
681 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
685 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
686 uasm_il_bnez(u32
**p
, struct uasm_reloc
**r
, unsigned int reg
, int lid
)
688 uasm_r_mips_pc16(r
, *p
, lid
);
689 uasm_i_bnez(p
, reg
, 0);
692 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
696 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
697 uasm_il_bgezl(u32
**p
, struct uasm_reloc
**r
, unsigned int reg
, int lid
)
699 uasm_r_mips_pc16(r
, *p
, lid
);
700 uasm_i_bgezl(p
, reg
, 0);
703 <<<<<<< HEAD
:arch
/mips
/mm
/uasm
.c
707 >>>>>>> 264e3e889d86e552b4191d69bb60f4f3b383135a
:arch
/mips
/mm
/uasm
.c
708 uasm_il_bgez(u32
**p
, struct uasm_reloc
**r
, unsigned int reg
, int lid
)
710 uasm_r_mips_pc16(r
, *p
, lid
);
711 uasm_i_bgez(p
, reg
, 0);