aboutsummaryrefslogtreecommitdiffstats
path: root/arch/mips/mm/uasm.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/mips/mm/uasm.c')
-rw-r--r--arch/mips/mm/uasm.c68
1 files changed, 34 insertions, 34 deletions
diff --git a/arch/mips/mm/uasm.c b/arch/mips/mm/uasm.c
index e3f74ed5f704..1a6f7704cc89 100644
--- a/arch/mips/mm/uasm.c
+++ b/arch/mips/mm/uasm.c
@@ -82,7 +82,7 @@ struct insn {
82 | (e) << RE_SH \ 82 | (e) << RE_SH \
83 | (f) << FUNC_SH) 83 | (f) << FUNC_SH)
84 84
85static struct insn insn_table[] __initdata = { 85static struct insn insn_table[] __cpuinitdata = {
86 { insn_addiu, M(addiu_op, 0, 0, 0, 0, 0), RS | RT | SIMM }, 86 { insn_addiu, M(addiu_op, 0, 0, 0, 0, 0), RS | RT | SIMM },
87 { insn_addu, M(spec_op, 0, 0, 0, 0, addu_op), RS | RT | RD }, 87 { insn_addu, M(spec_op, 0, 0, 0, 0, addu_op), RS | RT | RD },
88 { insn_and, M(spec_op, 0, 0, 0, 0, and_op), RS | RT | RD }, 88 { insn_and, M(spec_op, 0, 0, 0, 0, and_op), RS | RT | RD },
@@ -135,7 +135,7 @@ static struct insn insn_table[] __initdata = {
135 135
136#undef M 136#undef M
137 137
138static inline __init u32 build_rs(u32 arg) 138static inline __cpuinit u32 build_rs(u32 arg)
139{ 139{
140 if (arg & ~RS_MASK) 140 if (arg & ~RS_MASK)
141 printk(KERN_WARNING "Micro-assembler field overflow\n"); 141 printk(KERN_WARNING "Micro-assembler field overflow\n");
@@ -143,7 +143,7 @@ static inline __init u32 build_rs(u32 arg)
143 return (arg & RS_MASK) << RS_SH; 143 return (arg & RS_MASK) << RS_SH;
144} 144}
145 145
146static inline __init u32 build_rt(u32 arg) 146static inline __cpuinit u32 build_rt(u32 arg)
147{ 147{
148 if (arg & ~RT_MASK) 148 if (arg & ~RT_MASK)
149 printk(KERN_WARNING "Micro-assembler field overflow\n"); 149 printk(KERN_WARNING "Micro-assembler field overflow\n");
@@ -151,7 +151,7 @@ static inline __init u32 build_rt(u32 arg)
151 return (arg & RT_MASK) << RT_SH; 151 return (arg & RT_MASK) << RT_SH;
152} 152}
153 153
154static inline __init u32 build_rd(u32 arg) 154static inline __cpuinit u32 build_rd(u32 arg)
155{ 155{
156 if (arg & ~RD_MASK) 156 if (arg & ~RD_MASK)
157 printk(KERN_WARNING "Micro-assembler field overflow\n"); 157 printk(KERN_WARNING "Micro-assembler field overflow\n");
@@ -159,7 +159,7 @@ static inline __init u32 build_rd(u32 arg)
159 return (arg & RD_MASK) << RD_SH; 159 return (arg & RD_MASK) << RD_SH;
160} 160}
161 161
162static inline __init u32 build_re(u32 arg) 162static inline __cpuinit u32 build_re(u32 arg)
163{ 163{
164 if (arg & ~RE_MASK) 164 if (arg & ~RE_MASK)
165 printk(KERN_WARNING "Micro-assembler field overflow\n"); 165 printk(KERN_WARNING "Micro-assembler field overflow\n");
@@ -167,7 +167,7 @@ static inline __init u32 build_re(u32 arg)
167 return (arg & RE_MASK) << RE_SH; 167 return (arg & RE_MASK) << RE_SH;
168} 168}
169 169
170static inline __init u32 build_simm(s32 arg) 170static inline __cpuinit u32 build_simm(s32 arg)
171{ 171{
172 if (arg > 0x7fff || arg < -0x8000) 172 if (arg > 0x7fff || arg < -0x8000)
173 printk(KERN_WARNING "Micro-assembler field overflow\n"); 173 printk(KERN_WARNING "Micro-assembler field overflow\n");
@@ -175,7 +175,7 @@ static inline __init u32 build_simm(s32 arg)
175 return arg & 0xffff; 175 return arg & 0xffff;
176} 176}
177 177
178static inline __init u32 build_uimm(u32 arg) 178static inline __cpuinit u32 build_uimm(u32 arg)
179{ 179{
180 if (arg & ~IMM_MASK) 180 if (arg & ~IMM_MASK)
181 printk(KERN_WARNING "Micro-assembler field overflow\n"); 181 printk(KERN_WARNING "Micro-assembler field overflow\n");
@@ -183,7 +183,7 @@ static inline __init u32 build_uimm(u32 arg)
183 return arg & IMM_MASK; 183 return arg & IMM_MASK;
184} 184}
185 185
186static inline __init u32 build_bimm(s32 arg) 186static inline __cpuinit u32 build_bimm(s32 arg)
187{ 187{
188 if (arg > 0x1ffff || arg < -0x20000) 188 if (arg > 0x1ffff || arg < -0x20000)
189 printk(KERN_WARNING "Micro-assembler field overflow\n"); 189 printk(KERN_WARNING "Micro-assembler field overflow\n");
@@ -194,7 +194,7 @@ static inline __init u32 build_bimm(s32 arg)
194 return ((arg < 0) ? (1 << 15) : 0) | ((arg >> 2) & 0x7fff); 194 return ((arg < 0) ? (1 << 15) : 0) | ((arg >> 2) & 0x7fff);
195} 195}
196 196
197static inline __init u32 build_jimm(u32 arg) 197static inline __cpuinit u32 build_jimm(u32 arg)
198{ 198{
199 if (arg & ~((JIMM_MASK) << 2)) 199 if (arg & ~((JIMM_MASK) << 2))
200 printk(KERN_WARNING "Micro-assembler field overflow\n"); 200 printk(KERN_WARNING "Micro-assembler field overflow\n");
@@ -202,7 +202,7 @@ static inline __init u32 build_jimm(u32 arg)
202 return (arg >> 2) & JIMM_MASK; 202 return (arg >> 2) & JIMM_MASK;
203} 203}
204 204
205static inline __init u32 build_func(u32 arg) 205static inline __cpuinit u32 build_func(u32 arg)
206{ 206{
207 if (arg & ~FUNC_MASK) 207 if (arg & ~FUNC_MASK)
208 printk(KERN_WARNING "Micro-assembler field overflow\n"); 208 printk(KERN_WARNING "Micro-assembler field overflow\n");
@@ -210,7 +210,7 @@ static inline __init u32 build_func(u32 arg)
210 return arg & FUNC_MASK; 210 return arg & FUNC_MASK;
211} 211}
212 212
213static inline __init u32 build_set(u32 arg) 213static inline __cpuinit u32 build_set(u32 arg)
214{ 214{
215 if (arg & ~SET_MASK) 215 if (arg & ~SET_MASK)
216 printk(KERN_WARNING "Micro-assembler field overflow\n"); 216 printk(KERN_WARNING "Micro-assembler field overflow\n");
@@ -222,7 +222,7 @@ static inline __init u32 build_set(u32 arg)
222 * The order of opcode arguments is implicitly left to right, 222 * The order of opcode arguments is implicitly left to right,
223 * starting with RS and ending with FUNC or IMM. 223 * starting with RS and ending with FUNC or IMM.
224 */ 224 */
225static void __init build_insn(u32 **buf, enum opcode opc, ...) 225static void __cpuinit build_insn(u32 **buf, enum opcode opc, ...)
226{ 226{
227 struct insn *ip = NULL; 227 struct insn *ip = NULL;
228 unsigned int i; 228 unsigned int i;
@@ -375,14 +375,14 @@ I_u3u1u2(_xor)
375I_u2u1u3(_xori) 375I_u2u1u3(_xori)
376 376
377/* Handle labels. */ 377/* Handle labels. */
378void __init uasm_build_label(struct uasm_label **lab, u32 *addr, int lid) 378void __cpuinit uasm_build_label(struct uasm_label **lab, u32 *addr, int lid)
379{ 379{
380 (*lab)->addr = addr; 380 (*lab)->addr = addr;
381 (*lab)->lab = lid; 381 (*lab)->lab = lid;
382 (*lab)++; 382 (*lab)++;
383} 383}
384 384
385int __init uasm_in_compat_space_p(long addr) 385int __cpuinit uasm_in_compat_space_p(long addr)
386{ 386{
387 /* Is this address in 32bit compat space? */ 387 /* Is this address in 32bit compat space? */
388#ifdef CONFIG_64BIT 388#ifdef CONFIG_64BIT
@@ -392,7 +392,7 @@ int __init uasm_in_compat_space_p(long addr)
392#endif 392#endif
393} 393}
394 394
395int __init uasm_rel_highest(long val) 395int __cpuinit uasm_rel_highest(long val)
396{ 396{
397#ifdef CONFIG_64BIT 397#ifdef CONFIG_64BIT
398 return ((((val + 0x800080008000L) >> 48) & 0xffff) ^ 0x8000) - 0x8000; 398 return ((((val + 0x800080008000L) >> 48) & 0xffff) ^ 0x8000) - 0x8000;
@@ -401,7 +401,7 @@ int __init uasm_rel_highest(long val)
401#endif 401#endif
402} 402}
403 403
404int __init uasm_rel_higher(long val) 404int __cpuinit uasm_rel_higher(long val)
405{ 405{
406#ifdef CONFIG_64BIT 406#ifdef CONFIG_64BIT
407 return ((((val + 0x80008000L) >> 32) & 0xffff) ^ 0x8000) - 0x8000; 407 return ((((val + 0x80008000L) >> 32) & 0xffff) ^ 0x8000) - 0x8000;
@@ -410,17 +410,17 @@ int __init uasm_rel_higher(long val)
410#endif 410#endif
411} 411}
412 412
413int __init uasm_rel_hi(long val) 413int __cpuinit uasm_rel_hi(long val)
414{ 414{
415 return ((((val + 0x8000L) >> 16) & 0xffff) ^ 0x8000) - 0x8000; 415 return ((((val + 0x8000L) >> 16) & 0xffff) ^ 0x8000) - 0x8000;
416} 416}
417 417
418int __init uasm_rel_lo(long val) 418int __cpuinit uasm_rel_lo(long val)
419{ 419{
420 return ((val & 0xffff) ^ 0x8000) - 0x8000; 420 return ((val & 0xffff) ^ 0x8000) - 0x8000;
421} 421}
422 422
423void __init UASM_i_LA_mostly(u32 **buf, unsigned int rs, long addr) 423void __cpuinit UASM_i_LA_mostly(u32 **buf, unsigned int rs, long addr)
424{ 424{
425 if (!uasm_in_compat_space_p(addr)) { 425 if (!uasm_in_compat_space_p(addr)) {
426 uasm_i_lui(buf, rs, uasm_rel_highest(addr)); 426 uasm_i_lui(buf, rs, uasm_rel_highest(addr));
@@ -436,7 +436,7 @@ void __init UASM_i_LA_mostly(u32 **buf, unsigned int rs, long addr)
436 uasm_i_lui(buf, rs, uasm_rel_hi(addr)); 436 uasm_i_lui(buf, rs, uasm_rel_hi(addr));
437} 437}
438 438
439void __init UASM_i_LA(u32 **buf, unsigned int rs, long addr) 439void __cpuinit UASM_i_LA(u32 **buf, unsigned int rs, long addr)
440{ 440{
441 UASM_i_LA_mostly(buf, rs, addr); 441 UASM_i_LA_mostly(buf, rs, addr);
442 if (uasm_rel_lo(addr)) { 442 if (uasm_rel_lo(addr)) {
@@ -448,7 +448,7 @@ void __init UASM_i_LA(u32 **buf, unsigned int rs, long addr)
448} 448}
449 449
450/* Handle relocations. */ 450/* Handle relocations. */
451void __init 451void __cpuinit
452uasm_r_mips_pc16(struct uasm_reloc **rel, u32 *addr, int lid) 452uasm_r_mips_pc16(struct uasm_reloc **rel, u32 *addr, int lid)
453{ 453{
454 (*rel)->addr = addr; 454 (*rel)->addr = addr;
@@ -457,7 +457,7 @@ uasm_r_mips_pc16(struct uasm_reloc **rel, u32 *addr, int lid)
457 (*rel)++; 457 (*rel)++;
458} 458}
459 459
460static inline void __init 460static inline void __cpuinit
461__resolve_relocs(struct uasm_reloc *rel, struct uasm_label *lab) 461__resolve_relocs(struct uasm_reloc *rel, struct uasm_label *lab)
462{ 462{
463 long laddr = (long)lab->addr; 463 long laddr = (long)lab->addr;
@@ -474,7 +474,7 @@ __resolve_relocs(struct uasm_reloc *rel, struct uasm_label *lab)
474 } 474 }
475} 475}
476 476
477void __init 477void __cpuinit
478uasm_resolve_relocs(struct uasm_reloc *rel, struct uasm_label *lab) 478uasm_resolve_relocs(struct uasm_reloc *rel, struct uasm_label *lab)
479{ 479{
480 struct uasm_label *l; 480 struct uasm_label *l;
@@ -485,7 +485,7 @@ uasm_resolve_relocs(struct uasm_reloc *rel, struct uasm_label *lab)
485 __resolve_relocs(rel, l); 485 __resolve_relocs(rel, l);
486} 486}
487 487
488void __init 488void __cpuinit
489uasm_move_relocs(struct uasm_reloc *rel, u32 *first, u32 *end, long off) 489uasm_move_relocs(struct uasm_reloc *rel, u32 *first, u32 *end, long off)
490{ 490{
491 for (; rel->lab != UASM_LABEL_INVALID; rel++) 491 for (; rel->lab != UASM_LABEL_INVALID; rel++)
@@ -493,7 +493,7 @@ uasm_move_relocs(struct uasm_reloc *rel, u32 *first, u32 *end, long off)
493 rel->addr += off; 493 rel->addr += off;
494} 494}
495 495
496void __init 496void __cpuinit
497uasm_move_labels(struct uasm_label *lab, u32 *first, u32 *end, long off) 497uasm_move_labels(struct uasm_label *lab, u32 *first, u32 *end, long off)
498{ 498{
499 for (; lab->lab != UASM_LABEL_INVALID; lab++) 499 for (; lab->lab != UASM_LABEL_INVALID; lab++)
@@ -501,7 +501,7 @@ uasm_move_labels(struct uasm_label *lab, u32 *first, u32 *end, long off)
501 lab->addr += off; 501 lab->addr += off;
502} 502}
503 503
504void __init 504void __cpuinit
505uasm_copy_handler(struct uasm_reloc *rel, struct uasm_label *lab, u32 *first, 505uasm_copy_handler(struct uasm_reloc *rel, struct uasm_label *lab, u32 *first,
506 u32 *end, u32 *target) 506 u32 *end, u32 *target)
507{ 507{
@@ -513,7 +513,7 @@ uasm_copy_handler(struct uasm_reloc *rel, struct uasm_label *lab, u32 *first,
513 uasm_move_labels(lab, first, end, off); 513 uasm_move_labels(lab, first, end, off);
514} 514}
515 515
516int __init uasm_insn_has_bdelay(struct uasm_reloc *rel, u32 *addr) 516int __cpuinit uasm_insn_has_bdelay(struct uasm_reloc *rel, u32 *addr)
517{ 517{
518 for (; rel->lab != UASM_LABEL_INVALID; rel++) { 518 for (; rel->lab != UASM_LABEL_INVALID; rel++) {
519 if (rel->addr == addr 519 if (rel->addr == addr
@@ -526,49 +526,49 @@ int __init uasm_insn_has_bdelay(struct uasm_reloc *rel, u32 *addr)
526} 526}
527 527
528/* Convenience functions for labeled branches. */ 528/* Convenience functions for labeled branches. */
529void __init 529void __cpuinit
530uasm_il_bltz(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) 530uasm_il_bltz(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid)
531{ 531{
532 uasm_r_mips_pc16(r, *p, lid); 532 uasm_r_mips_pc16(r, *p, lid);
533 uasm_i_bltz(p, reg, 0); 533 uasm_i_bltz(p, reg, 0);
534} 534}
535 535
536void __init 536void __cpuinit
537uasm_il_b(u32 **p, struct uasm_reloc **r, int lid) 537uasm_il_b(u32 **p, struct uasm_reloc **r, int lid)
538{ 538{
539 uasm_r_mips_pc16(r, *p, lid); 539 uasm_r_mips_pc16(r, *p, lid);
540 uasm_i_b(p, 0); 540 uasm_i_b(p, 0);
541} 541}
542 542
543void __init 543void __cpuinit
544uasm_il_beqz(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) 544uasm_il_beqz(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid)
545{ 545{
546 uasm_r_mips_pc16(r, *p, lid); 546 uasm_r_mips_pc16(r, *p, lid);
547 uasm_i_beqz(p, reg, 0); 547 uasm_i_beqz(p, reg, 0);
548} 548}
549 549
550void __init 550void __cpuinit
551uasm_il_beqzl(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) 551uasm_il_beqzl(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid)
552{ 552{
553 uasm_r_mips_pc16(r, *p, lid); 553 uasm_r_mips_pc16(r, *p, lid);
554 uasm_i_beqzl(p, reg, 0); 554 uasm_i_beqzl(p, reg, 0);
555} 555}
556 556
557void __init 557void __cpuinit
558uasm_il_bnez(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) 558uasm_il_bnez(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid)
559{ 559{
560 uasm_r_mips_pc16(r, *p, lid); 560 uasm_r_mips_pc16(r, *p, lid);
561 uasm_i_bnez(p, reg, 0); 561 uasm_i_bnez(p, reg, 0);
562} 562}
563 563
564void __init 564void __cpuinit
565uasm_il_bgezl(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) 565uasm_il_bgezl(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid)
566{ 566{
567 uasm_r_mips_pc16(r, *p, lid); 567 uasm_r_mips_pc16(r, *p, lid);
568 uasm_i_bgezl(p, reg, 0); 568 uasm_i_bgezl(p, reg, 0);
569} 569}
570 570
571void __init 571void __cpuinit
572uasm_il_bgez(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) 572uasm_il_bgez(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid)
573{ 573{
574 uasm_r_mips_pc16(r, *p, lid); 574 uasm_r_mips_pc16(r, *p, lid);