Changeset 590 for trunk/platform/generic/wrappers.c
- Timestamp:
- 11/25/08 00:14:46 (4 years ago)
- File:
-
- 1 edited
-
trunk/platform/generic/wrappers.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/platform/generic/wrappers.c
r547 r590 720 720 return 0; 721 721 } 722 723 void reverse_bytes_order(char* start, int count){ 724 // note, we will go to count rounded up to the nearest 32 725 asm volatile( 726 "ldr r2, =0xFF00FF\n" // r2 = mask 727 "add r1, r0, r1\n" // r1 = start + count 728 "LOOP:\n" 729 "ldm r0, {R4-R11}\n" // load 8 words 730 731 // out = ((in>>8) & 0xFF00FF) | ((in&0xFF00FF) << 8); 732 "mov r3, r4, lsr #8\n" // r3 = in >> 8 733 "and r3, r3, r2\n" // r3 &= 0xFF00FF 734 "and r4, r4, r2\n" // r4 = in & 0xFF00FF 735 "orr r4, r3, r4, asl #8\n" // out = r3 | (r4 << 8) 736 737 "mov r3, r5, lsr #8\n" 738 "and r3, r3, r2\n" 739 "and r5, r5, r2\n" 740 "orr r5, r3, r5, asl #8\n" 741 742 "mov r3, r6, lsr #8\n" 743 "and r3, r3, r2\n" 744 "and r6, r6, r2\n" 745 "orr r6, r3, r6, asl #8\n" 746 747 "mov r3, r7, lsr #8\n" 748 "and r3, r3, r2\n" 749 "and r7, r7, r2\n" 750 "orr r7, r3, r7, asl #8\n" 751 752 "mov r3, r8, lsr #8\n" 753 "and r3, r3, r2\n" 754 "and r8, r8, r2\n" 755 "orr r8, r3, r8, asl #8\n" 756 757 "mov r3, r9, lsr #8\n" 758 "and r3, r3, r2\n" 759 "and r9, r9, r2\n" 760 "orr r9, r3, r9, asl #8\n" 761 762 "mov r3, r10, lsr #8\n" 763 "and r3, r3, r2\n" 764 "and r10, r10, r2\n" 765 "orr r10, r3, r10, asl #8\n" 766 767 "mov r3, r11, lsr #8\n" 768 "and r3, r3, r2\n" 769 "and r11, r11, r2\n" 770 "orr r11, r3, r11, asl #8\n" 771 772 "stmia r0!, {r4-r11}\n" // store and increment 773 774 "cmp r0, r1\n" 775 "bcc LOOP\n" 776 :::"r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","r10","r11" 777 ); 778 } 779
Note: See TracChangeset
for help on using the changeset viewer.