29aa7db844928bea4e51ee16c739b89a5b3d078f
[picodrive.git] / Draw_amips.s
1 # vim:filetype=mips
2
3 # several drawing related functions for Allegrex MIPS
4 # (c) Copyright 2007, Grazvydas "notaz" Ignotas
5 # All Rights Reserved
6
7 .set noreorder # don't reorder any instructions
8 .set noat      # don't use $at
9
10 .text
11 .align 4
12
13 # void amips_clut(unsigned short *dst, unsigned char *src, unsigned short *pal, int count)
14
15 .global amips_clut
16
17 amips_clut:
18     srl     $a3, 2
19 amips_clut_loop:
20     lbu     $t0, 0($a1)           # tried lw here, no improvement noticed
21     lbu     $t1, 1($a1)
22     lbu     $t2, 2($a1)
23     lbu     $t3, 3($a1)
24     sll     $t0, 1
25     sll     $t1, 1
26     sll     $t2, 1
27     sll     $t3, 1
28     addu    $t0, $a2
29     addu    $t1, $a2
30     addu    $t2, $a2
31     addu    $t3, $a2
32     lhu     $t0, 0($t0)
33     lhu     $t1, 0($t1)
34     lhu     $t2, 0($t2)
35     lhu     $t3, 0($t3)
36     ins     $t0, $t1, 16, 16      # ins rt, rs, pos, size - Insert size bits starting
37     ins     $t2, $t3, 16, 16      #  from the LSB of rs into rt starting at position pos
38     sw      $t0, 0($a0)
39     sw      $t2, 4($a0)
40     addiu   $a0, 8
41     addiu   $a3, -1
42     bnez    $a3, amips_clut_loop
43     addiu   $a1, 4
44     jr      $ra
45     nop
46
47
48 .global amips_clut_6bit
49
50 amips_clut_6bit:
51     srl     $a3, 2
52     li      $t4, 0
53     li      $t5, 0
54     li      $t6, 0
55     li      $t7, 0
56 amips_clut_loop6:
57     lbu     $t0, 0($a1)           # tried lw here, no improvement noticed
58     lbu     $t1, 1($a1)
59     lbu     $t2, 2($a1)
60     lbu     $t3, 3($a1)
61     ins     $t4, $t0, 1, 6
62     ins     $t5, $t1, 1, 6
63     ins     $t6, $t2, 1, 6
64     ins     $t7, $t3, 1, 6
65     addu    $t0, $t4, $a2
66     addu    $t1, $t5, $a2
67     addu    $t2, $t6, $a2
68     addu    $t3, $t7, $a2
69     lhu     $t0, 0($t0)
70     lhu     $t1, 0($t1)
71     lhu     $t2, 0($t2)
72     lhu     $t3, 0($t3)
73     ins     $t0, $t1, 16, 16      # ins rt, rs, pos, size - Insert size bits starting
74     ins     $t2, $t3, 16, 16      #  from the LSB of rs into rt starting at position pos
75     sw      $t0, 0($a0)
76     sw      $t2, 4($a0)
77     addiu   $a0, 8
78     addiu   $a3, -1
79     bnez    $a3, amips_clut_loop6
80     addiu   $a1, 4
81     jr      $ra
82     nop
83
84
85 # $a0 - pd, $a1 - tile word, $a2 - pal
86 # ext rt, rs, pos, size  // Extract size bits from position pos in rs and store in rt 
87
88 .macro TilePixelPrep shift dreg offs
89 .if \shift
90     ext     \dreg, $a1, \shift, 4
91 .else
92     andi    \dreg, $a1, 0xf
93 .endif
94 .if \offs
95     sltu    $t8, $0, \dreg
96     ins     $t9, $t8, \offs, 1
97 .else
98     sltu    $t9, $0, \dreg
99 .endif
100 .endm
101
102 .macro TileStartCode
103     sll     $a1, $a1, 1
104     lui     $t1, %hi(Pico+0x10000)
105     addu    $a1, $a1, $t1
106     lw      $a1, %lo(Pico+0x10000)($a1)  # Pico.vram + addr
107     beqz    $a1, TileEmpty
108     rotr    $t1, $a1, 4
109     beq     $t1, $a1, SingleColor
110     and     $v0, $0                      # not empty tile
111 .endm
112
113 .macro TileEndCode
114     xori    $t8, $t9, 0xff
115     beqz    $t8, tile11111111            # common case
116     lui     $v1, %hi(HighCol)
117     lui     $t8, %hi(TileTable)
118     ins     $t8, $t9, 2, 8
119     lw      $t8, %lo(TileTable)($t8)
120     lw      $v1, %lo(HighCol)($v1)
121     jr      $t8
122     addu    $a0, $v1
123 .endm
124
125
126 .global TileNorm
127
128 TileNorm:
129     TileStartCode
130     TilePixelPrep 12, $t0, 0
131     TilePixelPrep  8, $t1, 1
132     TilePixelPrep  4, $t2, 2
133     TilePixelPrep  0, $t3, 3
134     TilePixelPrep 28, $t4, 4
135     TilePixelPrep 24, $t5, 5
136     TilePixelPrep 20, $t6, 6
137     TilePixelPrep 16, $t7, 7
138     TileEndCode
139
140
141 .global TileFlip
142
143 TileFlip:
144     TileStartCode
145     TilePixelPrep 16, $t0, 0
146     TilePixelPrep 20, $t1, 1
147     TilePixelPrep 24, $t2, 2
148     TilePixelPrep 28, $t3, 3
149     TilePixelPrep  0, $t4, 4
150     TilePixelPrep  4, $t5, 5
151     TilePixelPrep  8, $t6, 6
152     TilePixelPrep 12, $t7, 7
153     TileEndCode
154
155
156 SingleColor:
157     lui     $t9, %hi(HighCol)
158     lw      $t9, %lo(HighCol)($t9)
159     andi    $t0, $a1, 0xf
160     or      $t0, $t0, $a2
161     addu    $a0, $t9
162     sb      $t0, 0($a0)
163     sb      $t0, 1($a0)
164     sb      $t0, 2($a0)
165     sb      $t0, 3($a0)
166     sb      $t0, 4($a0)
167     sb      $t0, 5($a0)
168     sb      $t0, 6($a0)
169     jr      $ra
170     sb      $t0, 7($a0)
171
172 TileEmpty:
173     jr      $ra
174     or      $v0, $0, 1                   # empty tile
175
176 tile11111111:
177     lw      $v1, %lo(HighCol)($v1)
178     or      $t0, $t0, $a2
179     addu    $a0, $v1
180     sb      $t0, 0($a0)
181 tile11111110:
182     or      $t1, $t1, $a2
183     sb      $t1, 1($a0)
184 tile11111100:
185     or      $t2, $t2, $a2
186     sb      $t2, 2($a0)
187 tile11111000:
188     or      $t3, $t3, $a2
189     sb      $t3, 3($a0)
190 tile11110000:
191     or      $t4, $t4, $a2
192     sb      $t4, 4($a0)
193 tile11100000:
194     or      $t5, $t5, $a2
195     sb      $t5, 5($a0)
196 tile11000000:
197     or      $t6, $t6, $a2
198     sb      $t6, 6($a0)
199 tile10000000:
200     or      $t7, $t7, $a2
201     jr      $ra
202     sb      $t7, 7($a0)
203 tile11111101:
204     or      $t0, $t0, $a2
205     sb      $t0, 0($a0)
206     or      $t2, $t2, $a2
207     sb      $t2, 2($a0)
208     or      $t3, $t3, $a2
209     sb      $t3, 3($a0)
210     or      $t4, $t4, $a2
211     sb      $t4, 4($a0)
212     or      $t5, $t5, $a2
213     sb      $t5, 5($a0)
214     or      $t6, $t6, $a2
215     sb      $t6, 6($a0)
216     or      $t7, $t7, $a2
217     jr      $ra
218     sb      $t7, 7($a0)
219 tile11111011:
220     or      $t0, $t0, $a2
221     sb      $t0, 0($a0)
222 tile11111010:
223     or      $t1, $t1, $a2
224     sb      $t1, 1($a0)
225     or      $t3, $t3, $a2
226     sb      $t3, 3($a0)
227     or      $t4, $t4, $a2
228     sb      $t4, 4($a0)
229     or      $t5, $t5, $a2
230     sb      $t5, 5($a0)
231     or      $t6, $t6, $a2
232     sb      $t6, 6($a0)
233     or      $t7, $t7, $a2
234     jr      $ra
235     sb      $t7, 7($a0)
236 tile11111001:
237     or      $t0, $t0, $a2
238     sb      $t0, 0($a0)
239     or      $t3, $t3, $a2
240     sb      $t3, 3($a0)
241     or      $t4, $t4, $a2
242     sb      $t4, 4($a0)
243     or      $t5, $t5, $a2
244     sb      $t5, 5($a0)
245     or      $t6, $t6, $a2
246     sb      $t6, 6($a0)
247     or      $t7, $t7, $a2
248     jr      $ra
249     sb      $t7, 7($a0)
250 tile11110111:
251     or      $t0, $t0, $a2
252     sb      $t0, 0($a0)
253 tile11110110:
254     or      $t1, $t1, $a2
255     sb      $t1, 1($a0)
256 tile11110100:
257     or      $t2, $t2, $a2
258     sb      $t2, 2($a0)
259     or      $t4, $t4, $a2
260     sb      $t4, 4($a0)
261     or      $t5, $t5, $a2
262     sb      $t5, 5($a0)
263     or      $t6, $t6, $a2
264     sb      $t6, 6($a0)
265     or      $t7, $t7, $a2
266     jr      $ra
267     sb      $t7, 7($a0)
268 tile11110101:
269     or      $t0, $t0, $a2
270     sb      $t0, 0($a0)
271     or      $t2, $t2, $a2
272     sb      $t2, 2($a0)
273     or      $t4, $t4, $a2
274     sb      $t4, 4($a0)
275     or      $t5, $t5, $a2
276     sb      $t5, 5($a0)
277     or      $t6, $t6, $a2
278     sb      $t6, 6($a0)
279     or      $t7, $t7, $a2
280     jr      $ra
281     sb      $t7, 7($a0)
282 tile11110011:
283     or      $t0, $t0, $a2
284     sb      $t0, 0($a0)
285 tile11110010:
286     or      $t1, $t1, $a2
287     sb      $t1, 1($a0)
288     or      $t4, $t4, $a2
289     sb      $t4, 4($a0)
290     or      $t5, $t5, $a2
291     sb      $t5, 5($a0)
292     or      $t6, $t6, $a2
293     sb      $t6, 6($a0)
294     or      $t7, $t7, $a2
295     jr      $ra
296     sb      $t7, 7($a0)
297 tile11110001:
298     or      $t0, $t0, $a2
299     sb      $t0, 0($a0)
300     or      $t4, $t4, $a2
301     sb      $t4, 4($a0)
302     or      $t5, $t5, $a2
303     sb      $t5, 5($a0)
304     or      $t6, $t6, $a2
305     sb      $t6, 6($a0)
306     or      $t7, $t7, $a2
307     jr      $ra
308     sb      $t7, 7($a0)
309 tile11101111:
310     or      $t0, $t0, $a2
311     sb      $t0, 0($a0)
312 tile11101110:
313     or      $t1, $t1, $a2
314     sb      $t1, 1($a0)
315 tile11101100:
316     or      $t2, $t2, $a2
317     sb      $t2, 2($a0)
318 tile11101000:
319     or      $t3, $t3, $a2
320     sb      $t3, 3($a0)
321     or      $t5, $t5, $a2
322     sb      $t5, 5($a0)
323     or      $t6, $t6, $a2
324     sb      $t6, 6($a0)
325     or      $t7, $t7, $a2
326     jr      $ra
327     sb      $t7, 7($a0)
328 tile11101101:
329     or      $t0, $t0, $a2
330     sb      $t0, 0($a0)
331     or      $t2, $t2, $a2
332     sb      $t2, 2($a0)
333     or      $t3, $t3, $a2
334     sb      $t3, 3($a0)
335     or      $t5, $t5, $a2
336     sb      $t5, 5($a0)
337     or      $t6, $t6, $a2
338     sb      $t6, 6($a0)
339     or      $t7, $t7, $a2
340     jr      $ra
341     sb      $t7, 7($a0)
342 tile11101011:
343     or      $t0, $t0, $a2
344     sb      $t0, 0($a0)
345 tile11101010:
346     or      $t1, $t1, $a2
347     sb      $t1, 1($a0)
348     or      $t3, $t3, $a2
349     sb      $t3, 3($a0)
350     or      $t5, $t5, $a2
351     sb      $t5, 5($a0)
352     or      $t6, $t6, $a2
353     sb      $t6, 6($a0)
354     or      $t7, $t7, $a2
355     jr      $ra
356     sb      $t7, 7($a0)
357 tile11101001:
358     or      $t0, $t0, $a2
359     sb      $t0, 0($a0)
360     or      $t3, $t3, $a2
361     sb      $t3, 3($a0)
362     or      $t5, $t5, $a2
363     sb      $t5, 5($a0)
364     or      $t6, $t6, $a2
365     sb      $t6, 6($a0)
366     or      $t7, $t7, $a2
367     jr      $ra
368     sb      $t7, 7($a0)
369 tile11100111:
370     or      $t0, $t0, $a2
371     sb      $t0, 0($a0)
372 tile11100110:
373     or      $t1, $t1, $a2
374     sb      $t1, 1($a0)
375 tile11100100:
376     or      $t2, $t2, $a2
377     sb      $t2, 2($a0)
378     or      $t5, $t5, $a2
379     sb      $t5, 5($a0)
380     or      $t6, $t6, $a2
381     sb      $t6, 6($a0)
382     or      $t7, $t7, $a2
383     jr      $ra
384     sb      $t7, 7($a0)
385 tile11100101:
386     or      $t0, $t0, $a2
387     sb      $t0, 0($a0)
388     or      $t2, $t2, $a2
389     sb      $t2, 2($a0)
390     or      $t5, $t5, $a2
391     sb      $t5, 5($a0)
392     or      $t6, $t6, $a2
393     sb      $t6, 6($a0)
394     or      $t7, $t7, $a2
395     jr      $ra
396     sb      $t7, 7($a0)
397 tile11100011:
398     or      $t0, $t0, $a2
399     sb      $t0, 0($a0)
400 tile11100010:
401     or      $t1, $t1, $a2
402     sb      $t1, 1($a0)
403     or      $t5, $t5, $a2
404     sb      $t5, 5($a0)
405     or      $t6, $t6, $a2
406     sb      $t6, 6($a0)
407     or      $t7, $t7, $a2
408     jr      $ra
409     sb      $t7, 7($a0)
410 tile11100001:
411     or      $t0, $t0, $a2
412     sb      $t0, 0($a0)
413     or      $t5, $t5, $a2
414     sb      $t5, 5($a0)
415     or      $t6, $t6, $a2
416     sb      $t6, 6($a0)
417     or      $t7, $t7, $a2
418     jr      $ra
419     sb      $t7, 7($a0)
420 tile11011111:
421     or      $t0, $t0, $a2
422     sb      $t0, 0($a0)
423 tile11011110:
424     or      $t1, $t1, $a2
425     sb      $t1, 1($a0)
426 tile11011100:
427     or      $t2, $t2, $a2
428     sb      $t2, 2($a0)
429 tile11011000:
430     or      $t3, $t3, $a2
431     sb      $t3, 3($a0)
432 tile11010000:
433     or      $t4, $t4, $a2
434     sb      $t4, 4($a0)
435     or      $t6, $t6, $a2
436     sb      $t6, 6($a0)
437     or      $t7, $t7, $a2
438     jr      $ra
439     sb      $t7, 7($a0)
440 tile11011101:
441     or      $t0, $t0, $a2
442     sb      $t0, 0($a0)
443     or      $t2, $t2, $a2
444     sb      $t2, 2($a0)
445     or      $t3, $t3, $a2
446     sb      $t3, 3($a0)
447     or      $t4, $t4, $a2
448     sb      $t4, 4($a0)
449     or      $t6, $t6, $a2
450     sb      $t6, 6($a0)
451     or      $t7, $t7, $a2
452     jr      $ra
453     sb      $t7, 7($a0)
454 tile11011011:
455     or      $t0, $t0, $a2
456     sb      $t0, 0($a0)
457 tile11011010:
458     or      $t1, $t1, $a2
459     sb      $t1, 1($a0)
460     or      $t3, $t3, $a2
461     sb      $t3, 3($a0)
462     or      $t4, $t4, $a2
463     sb      $t4, 4($a0)
464     or      $t6, $t6, $a2
465     sb      $t6, 6($a0)
466     or      $t7, $t7, $a2
467     jr      $ra
468     sb      $t7, 7($a0)
469 tile11011001:
470     or      $t0, $t0, $a2
471     sb      $t0, 0($a0)
472     or      $t3, $t3, $a2
473     sb      $t3, 3($a0)
474     or      $t4, $t4, $a2
475     sb      $t4, 4($a0)
476     or      $t6, $t6, $a2
477     sb      $t6, 6($a0)
478     or      $t7, $t7, $a2
479     jr      $ra
480     sb      $t7, 7($a0)
481 tile11010111:
482     or      $t0, $t0, $a2
483     sb      $t0, 0($a0)
484 tile11010110:
485     or      $t1, $t1, $a2
486     sb      $t1, 1($a0)
487 tile11010100:
488     or      $t2, $t2, $a2
489     sb      $t2, 2($a0)
490     or      $t4, $t4, $a2
491     sb      $t4, 4($a0)
492     or      $t6, $t6, $a2
493     sb      $t6, 6($a0)
494     or      $t7, $t7, $a2
495     jr      $ra
496     sb      $t7, 7($a0)
497 tile11010101:
498     or      $t0, $t0, $a2
499     sb      $t0, 0($a0)
500     or      $t2, $t2, $a2
501     sb      $t2, 2($a0)
502     or      $t4, $t4, $a2
503     sb      $t4, 4($a0)
504     or      $t6, $t6, $a2
505     sb      $t6, 6($a0)
506     or      $t7, $t7, $a2
507     jr      $ra
508     sb      $t7, 7($a0)
509 tile11010011:
510     or      $t0, $t0, $a2
511     sb      $t0, 0($a0)
512 tile11010010:
513     or      $t1, $t1, $a2
514     sb      $t1, 1($a0)
515     or      $t4, $t4, $a2
516     sb      $t4, 4($a0)
517     or      $t6, $t6, $a2
518     sb      $t6, 6($a0)
519     or      $t7, $t7, $a2
520     jr      $ra
521     sb      $t7, 7($a0)
522 tile11010001:
523     or      $t0, $t0, $a2
524     sb      $t0, 0($a0)
525     or      $t4, $t4, $a2
526     sb      $t4, 4($a0)
527     or      $t6, $t6, $a2
528     sb      $t6, 6($a0)
529     or      $t7, $t7, $a2
530     jr      $ra
531     sb      $t7, 7($a0)
532 tile11001111:
533     or      $t0, $t0, $a2
534     sb      $t0, 0($a0)
535 tile11001110:
536     or      $t1, $t1, $a2
537     sb      $t1, 1($a0)
538 tile11001100:
539     or      $t2, $t2, $a2
540     sb      $t2, 2($a0)
541 tile11001000:
542     or      $t3, $t3, $a2
543     sb      $t3, 3($a0)
544     or      $t6, $t6, $a2
545     sb      $t6, 6($a0)
546     or      $t7, $t7, $a2
547     jr      $ra
548     sb      $t7, 7($a0)
549 tile11001101:
550     or      $t0, $t0, $a2
551     sb      $t0, 0($a0)
552     or      $t2, $t2, $a2
553     sb      $t2, 2($a0)
554     or      $t3, $t3, $a2
555     sb      $t3, 3($a0)
556     or      $t6, $t6, $a2
557     sb      $t6, 6($a0)
558     or      $t7, $t7, $a2
559     jr      $ra
560     sb      $t7, 7($a0)
561 tile11001011:
562     or      $t0, $t0, $a2
563     sb      $t0, 0($a0)
564 tile11001010:
565     or      $t1, $t1, $a2
566     sb      $t1, 1($a0)
567     or      $t3, $t3, $a2
568     sb      $t3, 3($a0)
569     or      $t6, $t6, $a2
570     sb      $t6, 6($a0)
571     or      $t7, $t7, $a2
572     jr      $ra
573     sb      $t7, 7($a0)
574 tile11001001:
575     or      $t0, $t0, $a2
576     sb      $t0, 0($a0)
577     or      $t3, $t3, $a2
578     sb      $t3, 3($a0)
579     or      $t6, $t6, $a2
580     sb      $t6, 6($a0)
581     or      $t7, $t7, $a2
582     jr      $ra
583     sb      $t7, 7($a0)
584 tile11000111:
585     or      $t0, $t0, $a2
586     sb      $t0, 0($a0)
587 tile11000110:
588     or      $t1, $t1, $a2
589     sb      $t1, 1($a0)
590 tile11000100:
591     or      $t2, $t2, $a2
592     sb      $t2, 2($a0)
593     or      $t6, $t6, $a2
594     sb      $t6, 6($a0)
595     or      $t7, $t7, $a2
596     jr      $ra
597     sb      $t7, 7($a0)
598 tile11000101:
599     or      $t0, $t0, $a2
600     sb      $t0, 0($a0)
601     or      $t2, $t2, $a2
602     sb      $t2, 2($a0)
603     or      $t6, $t6, $a2
604     sb      $t6, 6($a0)
605     or      $t7, $t7, $a2
606     jr      $ra
607     sb      $t7, 7($a0)
608 tile11000011:
609     or      $t0, $t0, $a2
610     sb      $t0, 0($a0)
611 tile11000010:
612     or      $t1, $t1, $a2
613     sb      $t1, 1($a0)
614     or      $t6, $t6, $a2
615     sb      $t6, 6($a0)
616     or      $t7, $t7, $a2
617     jr      $ra
618     sb      $t7, 7($a0)
619 tile11000001:
620     or      $t0, $t0, $a2
621     sb      $t0, 0($a0)
622     or      $t6, $t6, $a2
623     sb      $t6, 6($a0)
624     or      $t7, $t7, $a2
625     jr      $ra
626     sb      $t7, 7($a0)
627 tile10111111:
628     or      $t0, $t0, $a2
629     sb      $t0, 0($a0)
630 tile10111110:
631     or      $t1, $t1, $a2
632     sb      $t1, 1($a0)
633 tile10111100:
634     or      $t2, $t2, $a2
635     sb      $t2, 2($a0)
636 tile10111000:
637     or      $t3, $t3, $a2
638     sb      $t3, 3($a0)
639 tile10110000:
640     or      $t4, $t4, $a2
641     sb      $t4, 4($a0)
642 tile10100000:
643     or      $t5, $t5, $a2
644     sb      $t5, 5($a0)
645     or      $t7, $t7, $a2
646     jr      $ra
647     sb      $t7, 7($a0)
648 tile10111101:
649     or      $t0, $t0, $a2
650     sb      $t0, 0($a0)
651     or      $t2, $t2, $a2
652     sb      $t2, 2($a0)
653     or      $t3, $t3, $a2
654     sb      $t3, 3($a0)
655     or      $t4, $t4, $a2
656     sb      $t4, 4($a0)
657     or      $t5, $t5, $a2
658     sb      $t5, 5($a0)
659     or      $t7, $t7, $a2
660     jr      $ra
661     sb      $t7, 7($a0)
662 tile10111011:
663     or      $t0, $t0, $a2
664     sb      $t0, 0($a0)
665 tile10111010:
666     or      $t1, $t1, $a2
667     sb      $t1, 1($a0)
668     or      $t3, $t3, $a2
669     sb      $t3, 3($a0)
670     or      $t4, $t4, $a2
671     sb      $t4, 4($a0)
672     or      $t5, $t5, $a2
673     sb      $t5, 5($a0)
674     or      $t7, $t7, $a2
675     jr      $ra
676     sb      $t7, 7($a0)
677 tile10111001:
678     or      $t0, $t0, $a2
679     sb      $t0, 0($a0)
680     or      $t3, $t3, $a2
681     sb      $t3, 3($a0)
682     or      $t4, $t4, $a2
683     sb      $t4, 4($a0)
684     or      $t5, $t5, $a2
685     sb      $t5, 5($a0)
686     or      $t7, $t7, $a2
687     jr      $ra
688     sb      $t7, 7($a0)
689 tile10110111:
690     or      $t0, $t0, $a2
691     sb      $t0, 0($a0)
692 tile10110110:
693     or      $t1, $t1, $a2
694     sb      $t1, 1($a0)
695 tile10110100:
696     or      $t2, $t2, $a2
697     sb      $t2, 2($a0)
698     or      $t4, $t4, $a2
699     sb      $t4, 4($a0)
700     or      $t5, $t5, $a2
701     sb      $t5, 5($a0)
702     or      $t7, $t7, $a2
703     jr      $ra
704     sb      $t7, 7($a0)
705 tile10110101:
706     or      $t0, $t0, $a2
707     sb      $t0, 0($a0)
708     or      $t2, $t2, $a2
709     sb      $t2, 2($a0)
710     or      $t4, $t4, $a2
711     sb      $t4, 4($a0)
712     or      $t5, $t5, $a2
713     sb      $t5, 5($a0)
714     or      $t7, $t7, $a2
715     jr      $ra
716     sb      $t7, 7($a0)
717 tile10110011:
718     or      $t0, $t0, $a2
719     sb      $t0, 0($a0)
720 tile10110010:
721     or      $t1, $t1, $a2
722     sb      $t1, 1($a0)
723     or      $t4, $t4, $a2
724     sb      $t4, 4($a0)
725     or      $t5, $t5, $a2
726     sb      $t5, 5($a0)
727     or      $t7, $t7, $a2
728     jr      $ra
729     sb      $t7, 7($a0)
730 tile10110001:
731     or      $t0, $t0, $a2
732     sb      $t0, 0($a0)
733     or      $t4, $t4, $a2
734     sb      $t4, 4($a0)
735     or      $t5, $t5, $a2
736     sb      $t5, 5($a0)
737     or      $t7, $t7, $a2
738     jr      $ra
739     sb      $t7, 7($a0)
740 tile10101111:
741     or      $t0, $t0, $a2
742     sb      $t0, 0($a0)
743 tile10101110:
744     or      $t1, $t1, $a2
745     sb      $t1, 1($a0)
746 tile10101100:
747     or      $t2, $t2, $a2
748     sb      $t2, 2($a0)
749 tile10101000:
750     or      $t3, $t3, $a2
751     sb      $t3, 3($a0)
752     or      $t5, $t5, $a2
753     sb      $t5, 5($a0)
754     or      $t7, $t7, $a2
755     jr      $ra
756     sb      $t7, 7($a0)
757 tile10101101:
758     or      $t0, $t0, $a2
759     sb      $t0, 0($a0)
760     or      $t2, $t2, $a2
761     sb      $t2, 2($a0)
762     or      $t3, $t3, $a2
763     sb      $t3, 3($a0)
764     or      $t5, $t5, $a2
765     sb      $t5, 5($a0)
766     or      $t7, $t7, $a2
767     jr      $ra
768     sb      $t7, 7($a0)
769 tile10101011:
770     or      $t0, $t0, $a2
771     sb      $t0, 0($a0)
772 tile10101010:
773     or      $t1, $t1, $a2
774     sb      $t1, 1($a0)
775     or      $t3, $t3, $a2
776     sb      $t3, 3($a0)
777     or      $t5, $t5, $a2
778     sb      $t5, 5($a0)
779     or      $t7, $t7, $a2
780     jr      $ra
781     sb      $t7, 7($a0)
782 tile10101001:
783     or      $t0, $t0, $a2
784     sb      $t0, 0($a0)
785     or      $t3, $t3, $a2
786     sb      $t3, 3($a0)
787     or      $t5, $t5, $a2
788     sb      $t5, 5($a0)
789     or      $t7, $t7, $a2
790     jr      $ra
791     sb      $t7, 7($a0)
792 tile10100111:
793     or      $t0, $t0, $a2
794     sb      $t0, 0($a0)
795 tile10100110:
796     or      $t1, $t1, $a2
797     sb      $t1, 1($a0)
798 tile10100100:
799     or      $t2, $t2, $a2
800     sb      $t2, 2($a0)
801     or      $t5, $t5, $a2
802     sb      $t5, 5($a0)
803     or      $t7, $t7, $a2
804     jr      $ra
805     sb      $t7, 7($a0)
806 tile10100101:
807     or      $t0, $t0, $a2
808     sb      $t0, 0($a0)
809     or      $t2, $t2, $a2
810     sb      $t2, 2($a0)
811     or      $t5, $t5, $a2
812     sb      $t5, 5($a0)
813     or      $t7, $t7, $a2
814     jr      $ra
815     sb      $t7, 7($a0)
816 tile10100011:
817     or      $t0, $t0, $a2
818     sb      $t0, 0($a0)
819 tile10100010:
820     or      $t1, $t1, $a2
821     sb      $t1, 1($a0)
822     or      $t5, $t5, $a2
823     sb      $t5, 5($a0)
824     or      $t7, $t7, $a2
825     jr      $ra
826     sb      $t7, 7($a0)
827 tile10100001:
828     or      $t0, $t0, $a2
829     sb      $t0, 0($a0)
830     or      $t5, $t5, $a2
831     sb      $t5, 5($a0)
832     or      $t7, $t7, $a2
833     jr      $ra
834     sb      $t7, 7($a0)
835 tile10011111:
836     or      $t0, $t0, $a2
837     sb      $t0, 0($a0)
838 tile10011110:
839     or      $t1, $t1, $a2
840     sb      $t1, 1($a0)
841 tile10011100:
842     or      $t2, $t2, $a2
843     sb      $t2, 2($a0)
844 tile10011000:
845     or      $t3, $t3, $a2
846     sb      $t3, 3($a0)
847 tile10010000:
848     or      $t4, $t4, $a2
849     sb      $t4, 4($a0)
850     or      $t7, $t7, $a2
851     jr      $ra
852     sb      $t7, 7($a0)
853 tile10011101:
854     or      $t0, $t0, $a2
855     sb      $t0, 0($a0)
856     or      $t2, $t2, $a2
857     sb      $t2, 2($a0)
858     or      $t3, $t3, $a2
859     sb      $t3, 3($a0)
860     or      $t4, $t4, $a2
861     sb      $t4, 4($a0)
862     or      $t7, $t7, $a2
863     jr      $ra
864     sb      $t7, 7($a0)
865 tile10011011:
866     or      $t0, $t0, $a2
867     sb      $t0, 0($a0)
868 tile10011010:
869     or      $t1, $t1, $a2
870     sb      $t1, 1($a0)
871     or      $t3, $t3, $a2
872     sb      $t3, 3($a0)
873     or      $t4, $t4, $a2
874     sb      $t4, 4($a0)
875     or      $t7, $t7, $a2
876     jr      $ra
877     sb      $t7, 7($a0)
878 tile10011001:
879     or      $t0, $t0, $a2
880     sb      $t0, 0($a0)
881     or      $t3, $t3, $a2
882     sb      $t3, 3($a0)
883     or      $t4, $t4, $a2
884     sb      $t4, 4($a0)
885     or      $t7, $t7, $a2
886     jr      $ra
887     sb      $t7, 7($a0)
888 tile10010111:
889     or      $t0, $t0, $a2
890     sb      $t0, 0($a0)
891 tile10010110:
892     or      $t1, $t1, $a2
893     sb      $t1, 1($a0)
894 tile10010100:
895     or      $t2, $t2, $a2
896     sb      $t2, 2($a0)
897     or      $t4, $t4, $a2
898     sb      $t4, 4($a0)
899     or      $t7, $t7, $a2
900     jr      $ra
901     sb      $t7, 7($a0)
902 tile10010101:
903     or      $t0, $t0, $a2
904     sb      $t0, 0($a0)
905     or      $t2, $t2, $a2
906     sb      $t2, 2($a0)
907     or      $t4, $t4, $a2
908     sb      $t4, 4($a0)
909     or      $t7, $t7, $a2
910     jr      $ra
911     sb      $t7, 7($a0)
912 tile10010011:
913     or      $t0, $t0, $a2
914     sb      $t0, 0($a0)
915 tile10010010:
916     or      $t1, $t1, $a2
917     sb      $t1, 1($a0)
918     or      $t4, $t4, $a2
919     sb      $t4, 4($a0)
920     or      $t7, $t7, $a2
921     jr      $ra
922     sb      $t7, 7($a0)
923 tile10010001:
924     or      $t0, $t0, $a2
925     sb      $t0, 0($a0)
926     or      $t4, $t4, $a2
927     sb      $t4, 4($a0)
928     or      $t7, $t7, $a2
929     jr      $ra
930     sb      $t7, 7($a0)
931 tile10001111:
932     or      $t0, $t0, $a2
933     sb      $t0, 0($a0)
934 tile10001110:
935     or      $t1, $t1, $a2
936     sb      $t1, 1($a0)
937 tile10001100:
938     or      $t2, $t2, $a2
939     sb      $t2, 2($a0)
940 tile10001000:
941     or      $t3, $t3, $a2
942     sb      $t3, 3($a0)
943     or      $t7, $t7, $a2
944     jr      $ra
945     sb      $t7, 7($a0)
946 tile10001101:
947     or      $t0, $t0, $a2
948     sb      $t0, 0($a0)
949     or      $t2, $t2, $a2
950     sb      $t2, 2($a0)
951     or      $t3, $t3, $a2
952     sb      $t3, 3($a0)
953     or      $t7, $t7, $a2
954     jr      $ra
955     sb      $t7, 7($a0)
956 tile10001011:
957     or      $t0, $t0, $a2
958     sb      $t0, 0($a0)
959 tile10001010:
960     or      $t1, $t1, $a2
961     sb      $t1, 1($a0)
962     or      $t3, $t3, $a2
963     sb      $t3, 3($a0)
964     or      $t7, $t7, $a2
965     jr      $ra
966     sb      $t7, 7($a0)
967 tile10001001:
968     or      $t0, $t0, $a2
969     sb      $t0, 0($a0)
970     or      $t3, $t3, $a2
971     sb      $t3, 3($a0)
972     or      $t7, $t7, $a2
973     jr      $ra
974     sb      $t7, 7($a0)
975 tile10000111:
976     or      $t0, $t0, $a2
977     sb      $t0, 0($a0)
978 tile10000110:
979     or      $t1, $t1, $a2
980     sb      $t1, 1($a0)
981 tile10000100:
982     or      $t2, $t2, $a2
983     sb      $t2, 2($a0)
984     or      $t7, $t7, $a2
985     jr      $ra
986     sb      $t7, 7($a0)
987 tile10000101:
988     or      $t0, $t0, $a2
989     sb      $t0, 0($a0)
990     or      $t2, $t2, $a2
991     sb      $t2, 2($a0)
992     or      $t7, $t7, $a2
993     jr      $ra
994     sb      $t7, 7($a0)
995 tile10000011:
996     or      $t0, $t0, $a2
997     sb      $t0, 0($a0)
998 tile10000010:
999     or      $t1, $t1, $a2
1000     sb      $t1, 1($a0)
1001     or      $t7, $t7, $a2
1002     jr      $ra
1003     sb      $t7, 7($a0)
1004 tile10000001:
1005     or      $t0, $t0, $a2
1006     sb      $t0, 0($a0)
1007     or      $t7, $t7, $a2
1008     jr      $ra
1009     sb      $t7, 7($a0)
1010 tile01111111:
1011     or      $t0, $t0, $a2
1012     sb      $t0, 0($a0)
1013 tile01111110:
1014     or      $t1, $t1, $a2
1015     sb      $t1, 1($a0)
1016 tile01111100:
1017     or      $t2, $t2, $a2
1018     sb      $t2, 2($a0)
1019 tile01111000:
1020     or      $t3, $t3, $a2
1021     sb      $t3, 3($a0)
1022 tile01110000:
1023     or      $t4, $t4, $a2
1024     sb      $t4, 4($a0)
1025 tile01100000:
1026     or      $t5, $t5, $a2
1027     sb      $t5, 5($a0)
1028 tile01000000:
1029     or      $t6, $t6, $a2
1030     jr      $ra
1031     sb      $t6, 6($a0)
1032 tile00000000:
1033 tile01111101:
1034     or      $t0, $t0, $a2
1035     sb      $t0, 0($a0)
1036     or      $t2, $t2, $a2
1037     sb      $t2, 2($a0)
1038     or      $t3, $t3, $a2
1039     sb      $t3, 3($a0)
1040     or      $t4, $t4, $a2
1041     sb      $t4, 4($a0)
1042     or      $t5, $t5, $a2
1043     sb      $t5, 5($a0)
1044     or      $t6, $t6, $a2
1045     jr      $ra
1046     sb      $t6, 6($a0)
1047 tile01111011:
1048     or      $t0, $t0, $a2
1049     sb      $t0, 0($a0)
1050 tile01111010:
1051     or      $t1, $t1, $a2
1052     sb      $t1, 1($a0)
1053     or      $t3, $t3, $a2
1054     sb      $t3, 3($a0)
1055     or      $t4, $t4, $a2
1056     sb      $t4, 4($a0)
1057     or      $t5, $t5, $a2
1058     sb      $t5, 5($a0)
1059     or      $t6, $t6, $a2
1060     jr      $ra
1061     sb      $t6, 6($a0)
1062 tile01111001:
1063     or      $t0, $t0, $a2
1064     sb      $t0, 0($a0)
1065     or      $t3, $t3, $a2
1066     sb      $t3, 3($a0)
1067     or      $t4, $t4, $a2
1068     sb      $t4, 4($a0)
1069     or      $t5, $t5, $a2
1070     sb      $t5, 5($a0)
1071     or      $t6, $t6, $a2
1072     jr      $ra
1073     sb      $t6, 6($a0)
1074 tile01110111:
1075     or      $t0, $t0, $a2
1076     sb      $t0, 0($a0)
1077 tile01110110:
1078     or      $t1, $t1, $a2
1079     sb      $t1, 1($a0)
1080 tile01110100:
1081     or      $t2, $t2, $a2
1082     sb      $t2, 2($a0)
1083     or      $t4, $t4, $a2
1084     sb      $t4, 4($a0)
1085     or      $t5, $t5, $a2
1086     sb      $t5, 5($a0)
1087     or      $t6, $t6, $a2
1088     jr      $ra
1089     sb      $t6, 6($a0)
1090 tile01110101:
1091     or      $t0, $t0, $a2
1092     sb      $t0, 0($a0)
1093     or      $t2, $t2, $a2
1094     sb      $t2, 2($a0)
1095     or      $t4, $t4, $a2
1096     sb      $t4, 4($a0)
1097     or      $t5, $t5, $a2
1098     sb      $t5, 5($a0)
1099     or      $t6, $t6, $a2
1100     jr      $ra
1101     sb      $t6, 6($a0)
1102 tile01110011:
1103     or      $t0, $t0, $a2
1104     sb      $t0, 0($a0)
1105 tile01110010:
1106     or      $t1, $t1, $a2
1107     sb      $t1, 1($a0)
1108     or      $t4, $t4, $a2
1109     sb      $t4, 4($a0)
1110     or      $t5, $t5, $a2
1111     sb      $t5, 5($a0)
1112     or      $t6, $t6, $a2
1113     jr      $ra
1114     sb      $t6, 6($a0)
1115 tile01110001:
1116     or      $t0, $t0, $a2
1117     sb      $t0, 0($a0)
1118     or      $t4, $t4, $a2
1119     sb      $t4, 4($a0)
1120     or      $t5, $t5, $a2
1121     sb      $t5, 5($a0)
1122     or      $t6, $t6, $a2
1123     jr      $ra
1124     sb      $t6, 6($a0)
1125 tile01101111:
1126     or      $t0, $t0, $a2
1127     sb      $t0, 0($a0)
1128 tile01101110:
1129     or      $t1, $t1, $a2
1130     sb      $t1, 1($a0)
1131 tile01101100:
1132     or      $t2, $t2, $a2
1133     sb      $t2, 2($a0)
1134 tile01101000:
1135     or      $t3, $t3, $a2
1136     sb      $t3, 3($a0)
1137     or      $t5, $t5, $a2
1138     sb      $t5, 5($a0)
1139     or      $t6, $t6, $a2
1140     jr      $ra
1141     sb      $t6, 6($a0)
1142 tile01101101:
1143     or      $t0, $t0, $a2
1144     sb      $t0, 0($a0)
1145     or      $t2, $t2, $a2
1146     sb      $t2, 2($a0)
1147     or      $t3, $t3, $a2
1148     sb      $t3, 3($a0)
1149     or      $t5, $t5, $a2
1150     sb      $t5, 5($a0)
1151     or      $t6, $t6, $a2
1152     jr      $ra
1153     sb      $t6, 6($a0)
1154 tile01101011:
1155     or      $t0, $t0, $a2
1156     sb      $t0, 0($a0)
1157 tile01101010:
1158     or      $t1, $t1, $a2
1159     sb      $t1, 1($a0)
1160     or      $t3, $t3, $a2
1161     sb      $t3, 3($a0)
1162     or      $t5, $t5, $a2
1163     sb      $t5, 5($a0)
1164     or      $t6, $t6, $a2
1165     jr      $ra
1166     sb      $t6, 6($a0)
1167 tile01101001:
1168     or      $t0, $t0, $a2
1169     sb      $t0, 0($a0)
1170     or      $t3, $t3, $a2
1171     sb      $t3, 3($a0)
1172     or      $t5, $t5, $a2
1173     sb      $t5, 5($a0)
1174     or      $t6, $t6, $a2
1175     jr      $ra
1176     sb      $t6, 6($a0)
1177 tile01100111:
1178     or      $t0, $t0, $a2
1179     sb      $t0, 0($a0)
1180 tile01100110:
1181     or      $t1, $t1, $a2
1182     sb      $t1, 1($a0)
1183 tile01100100:
1184     or      $t2, $t2, $a2
1185     sb      $t2, 2($a0)
1186     or      $t5, $t5, $a2
1187     sb      $t5, 5($a0)
1188     or      $t6, $t6, $a2
1189     jr      $ra
1190     sb      $t6, 6($a0)
1191 tile01100101:
1192     or      $t0, $t0, $a2
1193     sb      $t0, 0($a0)
1194     or      $t2, $t2, $a2
1195     sb      $t2, 2($a0)
1196     or      $t5, $t5, $a2
1197     sb      $t5, 5($a0)
1198     or      $t6, $t6, $a2
1199     jr      $ra
1200     sb      $t6, 6($a0)
1201 tile01100011:
1202     or      $t0, $t0, $a2
1203     sb      $t0, 0($a0)
1204 tile01100010:
1205     or      $t1, $t1, $a2
1206     sb      $t1, 1($a0)
1207     or      $t5, $t5, $a2
1208     sb      $t5, 5($a0)
1209     or      $t6, $t6, $a2
1210     jr      $ra
1211     sb      $t6, 6($a0)
1212 tile01100001:
1213     or      $t0, $t0, $a2
1214     sb      $t0, 0($a0)
1215     or      $t5, $t5, $a2
1216     sb      $t5, 5($a0)
1217     or      $t6, $t6, $a2
1218     jr      $ra
1219     sb      $t6, 6($a0)
1220 tile01011111:
1221     or      $t0, $t0, $a2
1222     sb      $t0, 0($a0)
1223 tile01011110:
1224     or      $t1, $t1, $a2
1225     sb      $t1, 1($a0)
1226 tile01011100:
1227     or      $t2, $t2, $a2
1228     sb      $t2, 2($a0)
1229 tile01011000:
1230     or      $t3, $t3, $a2
1231     sb      $t3, 3($a0)
1232 tile01010000:
1233     or      $t4, $t4, $a2
1234     sb      $t4, 4($a0)
1235     or      $t6, $t6, $a2
1236     jr      $ra
1237     sb      $t6, 6($a0)
1238 tile01011101:
1239     or      $t0, $t0, $a2
1240     sb      $t0, 0($a0)
1241     or      $t2, $t2, $a2
1242     sb      $t2, 2($a0)
1243     or      $t3, $t3, $a2
1244     sb      $t3, 3($a0)
1245     or      $t4, $t4, $a2
1246     sb      $t4, 4($a0)
1247     or      $t6, $t6, $a2
1248     jr      $ra
1249     sb      $t6, 6($a0)
1250 tile01011011:
1251     or      $t0, $t0, $a2
1252     sb      $t0, 0($a0)
1253 tile01011010:
1254     or      $t1, $t1, $a2
1255     sb      $t1, 1($a0)
1256     or      $t3, $t3, $a2
1257     sb      $t3, 3($a0)
1258     or      $t4, $t4, $a2
1259     sb      $t4, 4($a0)
1260     or      $t6, $t6, $a2
1261     jr      $ra
1262     sb      $t6, 6($a0)
1263 tile01011001:
1264     or      $t0, $t0, $a2
1265     sb      $t0, 0($a0)
1266     or      $t3, $t3, $a2
1267     sb      $t3, 3($a0)
1268     or      $t4, $t4, $a2
1269     sb      $t4, 4($a0)
1270     or      $t6, $t6, $a2
1271     jr      $ra
1272     sb      $t6, 6($a0)
1273 tile01010111:
1274     or      $t0, $t0, $a2
1275     sb      $t0, 0($a0)
1276 tile01010110:
1277     or      $t1, $t1, $a2
1278     sb      $t1, 1($a0)
1279 tile01010100:
1280     or      $t2, $t2, $a2
1281     sb      $t2, 2($a0)
1282     or      $t4, $t4, $a2
1283     sb      $t4, 4($a0)
1284     or      $t6, $t6, $a2
1285     jr      $ra
1286     sb      $t6, 6($a0)
1287 tile01010101:
1288     or      $t0, $t0, $a2
1289     sb      $t0, 0($a0)
1290     or      $t2, $t2, $a2
1291     sb      $t2, 2($a0)
1292     or      $t4, $t4, $a2
1293     sb      $t4, 4($a0)
1294     or      $t6, $t6, $a2
1295     jr      $ra
1296     sb      $t6, 6($a0)
1297 tile01010011:
1298     or      $t0, $t0, $a2
1299     sb      $t0, 0($a0)
1300 tile01010010:
1301     or      $t1, $t1, $a2
1302     sb      $t1, 1($a0)
1303     or      $t4, $t4, $a2
1304     sb      $t4, 4($a0)
1305     or      $t6, $t6, $a2
1306     jr      $ra
1307     sb      $t6, 6($a0)
1308 tile01010001:
1309     or      $t0, $t0, $a2
1310     sb      $t0, 0($a0)
1311     or      $t4, $t4, $a2
1312     sb      $t4, 4($a0)
1313     or      $t6, $t6, $a2
1314     jr      $ra
1315     sb      $t6, 6($a0)
1316 tile01001111:
1317     or      $t0, $t0, $a2
1318     sb      $t0, 0($a0)
1319 tile01001110:
1320     or      $t1, $t1, $a2
1321     sb      $t1, 1($a0)
1322 tile01001100:
1323     or      $t2, $t2, $a2
1324     sb      $t2, 2($a0)
1325 tile01001000:
1326     or      $t3, $t3, $a2
1327     sb      $t3, 3($a0)
1328     or      $t6, $t6, $a2
1329     jr      $ra
1330     sb      $t6, 6($a0)
1331 tile01001101:
1332     or      $t0, $t0, $a2
1333     sb      $t0, 0($a0)
1334     or      $t2, $t2, $a2
1335     sb      $t2, 2($a0)
1336     or      $t3, $t3, $a2
1337     sb      $t3, 3($a0)
1338     or      $t6, $t6, $a2
1339     jr      $ra
1340     sb      $t6, 6($a0)
1341 tile01001011:
1342     or      $t0, $t0, $a2
1343     sb      $t0, 0($a0)
1344 tile01001010:
1345     or      $t1, $t1, $a2
1346     sb      $t1, 1($a0)
1347     or      $t3, $t3, $a2
1348     sb      $t3, 3($a0)
1349     or      $t6, $t6, $a2
1350     jr      $ra
1351     sb      $t6, 6($a0)
1352 tile01001001:
1353     or      $t0, $t0, $a2
1354     sb      $t0, 0($a0)
1355     or      $t3, $t3, $a2
1356     sb      $t3, 3($a0)
1357     or      $t6, $t6, $a2
1358     jr      $ra
1359     sb      $t6, 6($a0)
1360 tile01000111:
1361     or      $t0, $t0, $a2
1362     sb      $t0, 0($a0)
1363 tile01000110:
1364     or      $t1, $t1, $a2
1365     sb      $t1, 1($a0)
1366 tile01000100:
1367     or      $t2, $t2, $a2
1368     sb      $t2, 2($a0)
1369     or      $t6, $t6, $a2
1370     jr      $ra
1371     sb      $t6, 6($a0)
1372 tile01000101:
1373     or      $t0, $t0, $a2
1374     sb      $t0, 0($a0)
1375     or      $t2, $t2, $a2
1376     sb      $t2, 2($a0)
1377     or      $t6, $t6, $a2
1378     jr      $ra
1379     sb      $t6, 6($a0)
1380 tile01000011:
1381     or      $t0, $t0, $a2
1382     sb      $t0, 0($a0)
1383 tile01000010:
1384     or      $t1, $t1, $a2
1385     sb      $t1, 1($a0)
1386     or      $t6, $t6, $a2
1387     jr      $ra
1388     sb      $t6, 6($a0)
1389 tile01000001:
1390     or      $t0, $t0, $a2
1391     sb      $t0, 0($a0)
1392     or      $t6, $t6, $a2
1393     jr      $ra
1394     sb      $t6, 6($a0)
1395 tile00111111:
1396     or      $t0, $t0, $a2
1397     sb      $t0, 0($a0)
1398 tile00111110:
1399     or      $t1, $t1, $a2
1400     sb      $t1, 1($a0)
1401 tile00111100:
1402     or      $t2, $t2, $a2
1403     sb      $t2, 2($a0)
1404 tile00111000:
1405     or      $t3, $t3, $a2
1406     sb      $t3, 3($a0)
1407 tile00110000:
1408     or      $t4, $t4, $a2
1409     sb      $t4, 4($a0)
1410 tile00100000:
1411     or      $t5, $t5, $a2
1412     jr      $ra
1413     sb      $t5, 5($a0)
1414 tile00111101:
1415     or      $t0, $t0, $a2
1416     sb      $t0, 0($a0)
1417     or      $t2, $t2, $a2
1418     sb      $t2, 2($a0)
1419     or      $t3, $t3, $a2
1420     sb      $t3, 3($a0)
1421     or      $t4, $t4, $a2
1422     sb      $t4, 4($a0)
1423     or      $t5, $t5, $a2
1424     jr      $ra
1425     sb      $t5, 5($a0)
1426 tile00111011:
1427     or      $t0, $t0, $a2
1428     sb      $t0, 0($a0)
1429 tile00111010:
1430     or      $t1, $t1, $a2
1431     sb      $t1, 1($a0)
1432     or      $t3, $t3, $a2
1433     sb      $t3, 3($a0)
1434     or      $t4, $t4, $a2
1435     sb      $t4, 4($a0)
1436     or      $t5, $t5, $a2
1437     jr      $ra
1438     sb      $t5, 5($a0)
1439 tile00111001:
1440     or      $t0, $t0, $a2
1441     sb      $t0, 0($a0)
1442     or      $t3, $t3, $a2
1443     sb      $t3, 3($a0)
1444     or      $t4, $t4, $a2
1445     sb      $t4, 4($a0)
1446     or      $t5, $t5, $a2
1447     jr      $ra
1448     sb      $t5, 5($a0)
1449 tile00110111:
1450     or      $t0, $t0, $a2
1451     sb      $t0, 0($a0)
1452 tile00110110:
1453     or      $t1, $t1, $a2
1454     sb      $t1, 1($a0)
1455 tile00110100:
1456     or      $t2, $t2, $a2
1457     sb      $t2, 2($a0)
1458     or      $t4, $t4, $a2
1459     sb      $t4, 4($a0)
1460     or      $t5, $t5, $a2
1461     jr      $ra
1462     sb      $t5, 5($a0)
1463 tile00110101:
1464     or      $t0, $t0, $a2
1465     sb      $t0, 0($a0)
1466     or      $t2, $t2, $a2
1467     sb      $t2, 2($a0)
1468     or      $t4, $t4, $a2
1469     sb      $t4, 4($a0)
1470     or      $t5, $t5, $a2
1471     jr      $ra
1472     sb      $t5, 5($a0)
1473 tile00110011:
1474     or      $t0, $t0, $a2
1475     sb      $t0, 0($a0)
1476 tile00110010:
1477     or      $t1, $t1, $a2
1478     sb      $t1, 1($a0)
1479     or      $t4, $t4, $a2
1480     sb      $t4, 4($a0)
1481     or      $t5, $t5, $a2
1482     jr      $ra
1483     sb      $t5, 5($a0)
1484 tile00110001:
1485     or      $t0, $t0, $a2
1486     sb      $t0, 0($a0)
1487     or      $t4, $t4, $a2
1488     sb      $t4, 4($a0)
1489     or      $t5, $t5, $a2
1490     jr      $ra
1491     sb      $t5, 5($a0)
1492 tile00101111:
1493     or      $t0, $t0, $a2
1494     sb      $t0, 0($a0)
1495 tile00101110:
1496     or      $t1, $t1, $a2
1497     sb      $t1, 1($a0)
1498 tile00101100:
1499     or      $t2, $t2, $a2
1500     sb      $t2, 2($a0)
1501 tile00101000:
1502     or      $t3, $t3, $a2
1503     sb      $t3, 3($a0)
1504     or      $t5, $t5, $a2
1505     jr      $ra
1506     sb      $t5, 5($a0)
1507 tile00101101:
1508     or      $t0, $t0, $a2
1509     sb      $t0, 0($a0)
1510     or      $t2, $t2, $a2
1511     sb      $t2, 2($a0)
1512     or      $t3, $t3, $a2
1513     sb      $t3, 3($a0)
1514     or      $t5, $t5, $a2
1515     jr      $ra
1516     sb      $t5, 5($a0)
1517 tile00101011:
1518     or      $t0, $t0, $a2
1519     sb      $t0, 0($a0)
1520 tile00101010:
1521     or      $t1, $t1, $a2
1522     sb      $t1, 1($a0)
1523     or      $t3, $t3, $a2
1524     sb      $t3, 3($a0)
1525     or      $t5, $t5, $a2
1526     jr      $ra
1527     sb      $t5, 5($a0)
1528 tile00101001:
1529     or      $t0, $t0, $a2
1530     sb      $t0, 0($a0)
1531     or      $t3, $t3, $a2
1532     sb      $t3, 3($a0)
1533     or      $t5, $t5, $a2
1534     jr      $ra
1535     sb      $t5, 5($a0)
1536 tile00100111:
1537     or      $t0, $t0, $a2
1538     sb      $t0, 0($a0)
1539 tile00100110:
1540     or      $t1, $t1, $a2
1541     sb      $t1, 1($a0)
1542 tile00100100:
1543     or      $t2, $t2, $a2
1544     sb      $t2, 2($a0)
1545     or      $t5, $t5, $a2
1546     jr      $ra
1547     sb      $t5, 5($a0)
1548 tile00100101:
1549     or      $t0, $t0, $a2
1550     sb      $t0, 0($a0)
1551     or      $t2, $t2, $a2
1552     sb      $t2, 2($a0)
1553     or      $t5, $t5, $a2
1554     jr      $ra
1555     sb      $t5, 5($a0)
1556 tile00100011:
1557     or      $t0, $t0, $a2
1558     sb      $t0, 0($a0)
1559 tile00100010:
1560     or      $t1, $t1, $a2
1561     sb      $t1, 1($a0)
1562     or      $t5, $t5, $a2
1563     jr      $ra
1564     sb      $t5, 5($a0)
1565 tile00100001:
1566     or      $t0, $t0, $a2
1567     sb      $t0, 0($a0)
1568     or      $t5, $t5, $a2
1569     jr      $ra
1570     sb      $t5, 5($a0)
1571 tile00011111:
1572     or      $t0, $t0, $a2
1573     sb      $t0, 0($a0)
1574 tile00011110:
1575     or      $t1, $t1, $a2
1576     sb      $t1, 1($a0)
1577 tile00011100:
1578     or      $t2, $t2, $a2
1579     sb      $t2, 2($a0)
1580 tile00011000:
1581     or      $t3, $t3, $a2
1582     sb      $t3, 3($a0)
1583 tile00010000:
1584     or      $t4, $t4, $a2
1585     jr      $ra
1586     sb      $t4, 4($a0)
1587 tile00011101:
1588     or      $t0, $t0, $a2
1589     sb      $t0, 0($a0)
1590     or      $t2, $t2, $a2
1591     sb      $t2, 2($a0)
1592     or      $t3, $t3, $a2
1593     sb      $t3, 3($a0)
1594     or      $t4, $t4, $a2
1595     jr      $ra
1596     sb      $t4, 4($a0)
1597 tile00011011:
1598     or      $t0, $t0, $a2
1599     sb      $t0, 0($a0)
1600 tile00011010:
1601     or      $t1, $t1, $a2
1602     sb      $t1, 1($a0)
1603     or      $t3, $t3, $a2
1604     sb      $t3, 3($a0)
1605     or      $t4, $t4, $a2
1606     jr      $ra
1607     sb      $t4, 4($a0)
1608 tile00011001:
1609     or      $t0, $t0, $a2
1610     sb      $t0, 0($a0)
1611     or      $t3, $t3, $a2
1612     sb      $t3, 3($a0)
1613     or      $t4, $t4, $a2
1614     jr      $ra
1615     sb      $t4, 4($a0)
1616 tile00010111:
1617     or      $t0, $t0, $a2
1618     sb      $t0, 0($a0)
1619 tile00010110:
1620     or      $t1, $t1, $a2
1621     sb      $t1, 1($a0)
1622 tile00010100:
1623     or      $t2, $t2, $a2
1624     sb      $t2, 2($a0)
1625     or      $t4, $t4, $a2
1626     jr      $ra
1627     sb      $t4, 4($a0)
1628 tile00010101:
1629     or      $t0, $t0, $a2
1630     sb      $t0, 0($a0)
1631     or      $t2, $t2, $a2
1632     sb      $t2, 2($a0)
1633     or      $t4, $t4, $a2
1634     jr      $ra
1635     sb      $t4, 4($a0)
1636 tile00010011:
1637     or      $t0, $t0, $a2
1638     sb      $t0, 0($a0)
1639 tile00010010:
1640     or      $t1, $t1, $a2
1641     sb      $t1, 1($a0)
1642     or      $t4, $t4, $a2
1643     jr      $ra
1644     sb      $t4, 4($a0)
1645 tile00010001:
1646     or      $t0, $t0, $a2
1647     sb      $t0, 0($a0)
1648     or      $t4, $t4, $a2
1649     jr      $ra
1650     sb      $t4, 4($a0)
1651 tile00001111:
1652     or      $t0, $t0, $a2
1653     sb      $t0, 0($a0)
1654 tile00001110:
1655     or      $t1, $t1, $a2
1656     sb      $t1, 1($a0)
1657 tile00001100:
1658     or      $t2, $t2, $a2
1659     sb      $t2, 2($a0)
1660 tile00001000:
1661     or      $t3, $t3, $a2
1662     jr      $ra
1663     sb      $t3, 3($a0)
1664 tile00001101:
1665     or      $t0, $t0, $a2
1666     sb      $t0, 0($a0)
1667     or      $t2, $t2, $a2
1668     sb      $t2, 2($a0)
1669     or      $t3, $t3, $a2
1670     jr      $ra
1671     sb      $t3, 3($a0)
1672 tile00001011:
1673     or      $t0, $t0, $a2
1674     sb      $t0, 0($a0)
1675 tile00001010:
1676     or      $t1, $t1, $a2
1677     sb      $t1, 1($a0)
1678     or      $t3, $t3, $a2
1679     jr      $ra
1680     sb      $t3, 3($a0)
1681 tile00001001:
1682     or      $t0, $t0, $a2
1683     sb      $t0, 0($a0)
1684     or      $t3, $t3, $a2
1685     jr      $ra
1686     sb      $t3, 3($a0)
1687 tile00000111:
1688     or      $t0, $t0, $a2
1689     sb      $t0, 0($a0)
1690 tile00000110:
1691     or      $t1, $t1, $a2
1692     sb      $t1, 1($a0)
1693 tile00000100:
1694     or      $t2, $t2, $a2
1695     jr      $ra
1696     sb      $t2, 2($a0)
1697 tile00000101:
1698     or      $t0, $t0, $a2
1699     sb      $t0, 0($a0)
1700     or      $t2, $t2, $a2
1701     jr      $ra
1702     sb      $t2, 2($a0)
1703 tile00000011:
1704     or      $t0, $t0, $a2
1705     sb      $t0, 0($a0)
1706 tile00000010:
1707     or      $t1, $t1, $a2
1708     jr      $ra
1709     sb      $t1, 1($a0)
1710 tile00000001:
1711     or      $t0, $t0, $a2
1712     jr      $ra
1713     sb      $t0, 0($a0)
1714
1715 .data
1716 .align 4
1717
1718 TileTable:
1719   .long 000000000000, tile00000001, tile00000010, tile00000011, tile00000100, tile00000101, tile00000110, tile00000111
1720   .long tile00001000, tile00001001, tile00001010, tile00001011, tile00001100, tile00001101, tile00001110, tile00001111
1721   .long tile00010000, tile00010001, tile00010010, tile00010011, tile00010100, tile00010101, tile00010110, tile00010111
1722   .long tile00011000, tile00011001, tile00011010, tile00011011, tile00011100, tile00011101, tile00011110, tile00011111
1723   .long tile00100000, tile00100001, tile00100010, tile00100011, tile00100100, tile00100101, tile00100110, tile00100111
1724   .long tile00101000, tile00101001, tile00101010, tile00101011, tile00101100, tile00101101, tile00101110, tile00101111
1725   .long tile00110000, tile00110001, tile00110010, tile00110011, tile00110100, tile00110101, tile00110110, tile00110111
1726   .long tile00111000, tile00111001, tile00111010, tile00111011, tile00111100, tile00111101, tile00111110, tile00111111
1727   .long tile01000000, tile01000001, tile01000010, tile01000011, tile01000100, tile01000101, tile01000110, tile01000111
1728   .long tile01001000, tile01001001, tile01001010, tile01001011, tile01001100, tile01001101, tile01001110, tile01001111
1729   .long tile01010000, tile01010001, tile01010010, tile01010011, tile01010100, tile01010101, tile01010110, tile01010111
1730   .long tile01011000, tile01011001, tile01011010, tile01011011, tile01011100, tile01011101, tile01011110, tile01011111
1731   .long tile01100000, tile01100001, tile01100010, tile01100011, tile01100100, tile01100101, tile01100110, tile01100111
1732   .long tile01101000, tile01101001, tile01101010, tile01101011, tile01101100, tile01101101, tile01101110, tile01101111
1733   .long tile01110000, tile01110001, tile01110010, tile01110011, tile01110100, tile01110101, tile01110110, tile01110111
1734   .long tile01111000, tile01111001, tile01111010, tile01111011, tile01111100, tile01111101, tile01111110, tile01111111
1735   .long tile10000000, tile10000001, tile10000010, tile10000011, tile10000100, tile10000101, tile10000110, tile10000111
1736   .long tile10001000, tile10001001, tile10001010, tile10001011, tile10001100, tile10001101, tile10001110, tile10001111
1737   .long tile10010000, tile10010001, tile10010010, tile10010011, tile10010100, tile10010101, tile10010110, tile10010111
1738   .long tile10011000, tile10011001, tile10011010, tile10011011, tile10011100, tile10011101, tile10011110, tile10011111
1739   .long tile10100000, tile10100001, tile10100010, tile10100011, tile10100100, tile10100101, tile10100110, tile10100111
1740   .long tile10101000, tile10101001, tile10101010, tile10101011, tile10101100, tile10101101, tile10101110, tile10101111
1741   .long tile10110000, tile10110001, tile10110010, tile10110011, tile10110100, tile10110101, tile10110110, tile10110111
1742   .long tile10111000, tile10111001, tile10111010, tile10111011, tile10111100, tile10111101, tile10111110, tile10111111
1743   .long tile11000000, tile11000001, tile11000010, tile11000011, tile11000100, tile11000101, tile11000110, tile11000111
1744   .long tile11001000, tile11001001, tile11001010, tile11001011, tile11001100, tile11001101, tile11001110, tile11001111
1745   .long tile11010000, tile11010001, tile11010010, tile11010011, tile11010100, tile11010101, tile11010110, tile11010111
1746   .long tile11011000, tile11011001, tile11011010, tile11011011, tile11011100, tile11011101, tile11011110, tile11011111
1747   .long tile11100000, tile11100001, tile11100010, tile11100011, tile11100100, tile11100101, tile11100110, tile11100111
1748   .long tile11101000, tile11101001, tile11101010, tile11101011, tile11101100, tile11101101, tile11101110, tile11101111
1749   .long tile11110000, tile11110001, tile11110010, tile11110011, tile11110100, tile11110101, tile11110110, tile11110111
1750   .long tile11111000, tile11111001, tile11111010, tile11111011, tile11111100, tile11111101, tile11111110, tile11111111
1751
1752