diff options
Diffstat (limited to 'arch/mips/mm/uasm.c')
-rw-r--r-- | arch/mips/mm/uasm.c | 68 |
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 | ||
85 | static struct insn insn_table[] __initdata = { | 85 | static 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 | ||
138 | static inline __init u32 build_rs(u32 arg) | 138 | static 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 | ||
146 | static inline __init u32 build_rt(u32 arg) | 146 | static 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 | ||
154 | static inline __init u32 build_rd(u32 arg) | 154 | static 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 | ||
162 | static inline __init u32 build_re(u32 arg) | 162 | static 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 | ||
170 | static inline __init u32 build_simm(s32 arg) | 170 | static 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 | ||
178 | static inline __init u32 build_uimm(u32 arg) | 178 | static 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 | ||
186 | static inline __init u32 build_bimm(s32 arg) | 186 | static 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 | ||
197 | static inline __init u32 build_jimm(u32 arg) | 197 | static 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 | ||
205 | static inline __init u32 build_func(u32 arg) | 205 | static 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 | ||
213 | static inline __init u32 build_set(u32 arg) | 213 | static 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 | */ |
225 | static void __init build_insn(u32 **buf, enum opcode opc, ...) | 225 | static 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) | |||
375 | I_u2u1u3(_xori) | 375 | I_u2u1u3(_xori) |
376 | 376 | ||
377 | /* Handle labels. */ | 377 | /* Handle labels. */ |
378 | void __init uasm_build_label(struct uasm_label **lab, u32 *addr, int lid) | 378 | void __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 | ||
385 | int __init uasm_in_compat_space_p(long addr) | 385 | int __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 | ||
395 | int __init uasm_rel_highest(long val) | 395 | int __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 | ||
404 | int __init uasm_rel_higher(long val) | 404 | int __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 | ||
413 | int __init uasm_rel_hi(long val) | 413 | int __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 | ||
418 | int __init uasm_rel_lo(long val) | 418 | int __cpuinit uasm_rel_lo(long val) |
419 | { | 419 | { |
420 | return ((val & 0xffff) ^ 0x8000) - 0x8000; | 420 | return ((val & 0xffff) ^ 0x8000) - 0x8000; |
421 | } | 421 | } |
422 | 422 | ||
423 | void __init UASM_i_LA_mostly(u32 **buf, unsigned int rs, long addr) | 423 | void __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 | ||
439 | void __init UASM_i_LA(u32 **buf, unsigned int rs, long addr) | 439 | void __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. */ |
451 | void __init | 451 | void __cpuinit |
452 | uasm_r_mips_pc16(struct uasm_reloc **rel, u32 *addr, int lid) | 452 | uasm_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 | ||
460 | static inline void __init | 460 | static 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 | ||
477 | void __init | 477 | void __cpuinit |
478 | uasm_resolve_relocs(struct uasm_reloc *rel, struct uasm_label *lab) | 478 | uasm_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 | ||
488 | void __init | 488 | void __cpuinit |
489 | uasm_move_relocs(struct uasm_reloc *rel, u32 *first, u32 *end, long off) | 489 | uasm_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 | ||
496 | void __init | 496 | void __cpuinit |
497 | uasm_move_labels(struct uasm_label *lab, u32 *first, u32 *end, long off) | 497 | uasm_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 | ||
504 | void __init | 504 | void __cpuinit |
505 | uasm_copy_handler(struct uasm_reloc *rel, struct uasm_label *lab, u32 *first, | 505 | uasm_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 | ||
516 | int __init uasm_insn_has_bdelay(struct uasm_reloc *rel, u32 *addr) | 516 | int __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. */ |
529 | void __init | 529 | void __cpuinit |
530 | uasm_il_bltz(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) | 530 | uasm_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 | ||
536 | void __init | 536 | void __cpuinit |
537 | uasm_il_b(u32 **p, struct uasm_reloc **r, int lid) | 537 | uasm_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 | ||
543 | void __init | 543 | void __cpuinit |
544 | uasm_il_beqz(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) | 544 | uasm_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 | ||
550 | void __init | 550 | void __cpuinit |
551 | uasm_il_beqzl(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) | 551 | uasm_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 | ||
557 | void __init | 557 | void __cpuinit |
558 | uasm_il_bnez(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) | 558 | uasm_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 | ||
564 | void __init | 564 | void __cpuinit |
565 | uasm_il_bgezl(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) | 565 | uasm_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 | ||
571 | void __init | 571 | void __cpuinit |
572 | uasm_il_bgez(u32 **p, struct uasm_reloc **r, unsigned int reg, int lid) | 572 | uasm_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); |