# HG changeset patch # User Mychaela Falconia # Date 1457066512 0 # Node ID 576e684603e0489fe4d50866f586bae7d3ca3560 # Parent 851c826f954580a26d67284a41ce65f3623f63fb l1_afunc.c differences analysed diff -r 851c826f9545 -r 576e684603e0 g23m/objdiff/l1_ext/l1_afunc.notes --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/g23m/objdiff/l1_ext/l1_afunc.notes Fri Mar 04 04:41:52 2016 +0000 @@ -0,0 +1,372 @@ +The result of l1_afunc.c recompilation is identical to the original up until +the l1a_clip_txpwr() function, which is the last function in the module. + +Original 20070608 version of l1_afunc.obj, disassembly of l1a_clip_txpwr(): + +$l1a_clip_txpwr: ; Global +; u_char l1a_clip_txpwr(); +; Begin function +; REGPARM r0: u_char supplied_txpwr; +; REGPARM r1: u_short radio_freq; +; REG r1: unsigned "C$21"; +; REG r1: unsigned "C$22"; +; REG r1: unsigned "C$23"; +; REG r2: struct ? *"K$6"; +; REG r1: u_char "U$41"; +; REG r1: u_char "U$82"; +; REG r1: u_char "U$95"; +; REG r1: u_char "U$108"; +; REG r0: u_char power; +; REG r1: u_short radio_freq; +; REG r0: u_char supplied_txpwr; +; REG r3: int "S$20"; +; REG r5: int "S$19"; +; REG r2: unsigned "S$18"; +; REG r1: unsigned "S$17"; +; REG r3: int "S$16"; +; REG r5: int "S$15"; +; REG r2: unsigned "S$14"; +; REG r1: unsigned "S$13"; +; REG r1: int "S$12"; +; REG r5: int "S$11"; +; REG r2: unsigned "S$10"; +; REG r1: unsigned "S$9"; +; REG r3: int "S$8"; +; REG r5: int "S$7"; +; REG r2: unsigned "S$6"; +; REG r1: unsigned "S$5"; +; REG r3: int "S$4"; +; REG r5: int "S$3"; +; REG r2: unsigned "S$2"; +; REG r1: unsigned "S$1"; +; REG r3: unsigned "U$26"; +; REG r3: unsigned "U$26"; +; REG r3: unsigned "U$26"; +; REG r1: u_char "U$22"; +; REG r3: u_char "U$22"; +; REG r4: unsigned "U$30"; +; REG r4: unsigned "U$30"; +; REG r4: unsigned "U$30"; +; REG r4: unsigned "U$30"; +; REG r4: unsigned "U$30"; +; REG r3: unsigned "U$51"; +; REG r3: unsigned "U$51"; +; REG r1: u_char "U$75"; +; REG r1: u_char "U$75"; + +$CODE16: ; label + 490: b530 push {r4, r5, lr} +; switch statement + 492: 4a87 ldr r2, =_l1_config ; via 0x6b0 + 494: 7813 ldrb r3, [r2, #0] + 496: 1e5b sub r3, r3, #1 + 498: 2b01 cmp r3, #1 + 49a: d800 bhi 0x49e + 49c: e0fa b 0x694 ; GSM or GSM_E + 49e: 3b02 sub r3, #2 + 4a0: 2b00 cmp r3, #0 + 4a2: d100 bne 0x4a6 + 4a4: e0cf b 0x646 ; PCS1900 + 4a6: 3b01 sub r3, #1 + 4a8: 2b00 cmp r3, #0 + 4aa: d100 bne 0x4ae + 4ac: e0a4 b 0x5f8 ; DCS1800 + 4ae: 3b01 sub r3, #1 + 4b0: 2b01 cmp r3, #1 + 4b2: d968 bls 0x586 ; DUAL or DUAL_EXT + 4b4: 3b02 sub r3, #2 + 4b6: 2b00 cmp r3, #0 + 4b8: d03d beq 0x536 ; GSM850 + 4ba: 3b01 sub r3, #1 + 4bc: 2b00 cmp r3, #0 + 4be: d000 beq 0x4c2 ; DUAL_US + 4c0: e0f5 b 0x6ae ; default - return +; case DUAL_US: + 4c2: 68d3 ldr r3, [r2, #12] ; 0xc + 4c4: 4299 cmp r1, r3 + 4c6: d20e bcs 0x4e6 +; low band (850) + 4c8: 4b7c ldr r3, =_MIN_TXPWR_GSM850 ; via 0x6bc + 4ca: 497d ldr r1, =_l1a_l1s_com+0x335 ; via 0x6c0 + 4cc: 7809 ldrb r1, [r1, #0] + 4ce: 5c59 ldrb r1, [r3, r1] + 4d0: 4288 cmp r0, r1 + 4d2: db06 blt 0x4e2 +; line + 4d4: 69d1 ldr r1, [r2, #28] ; 0x1c + 4d6: 4288 cmp r0, r1 + 4d8: d800 bhi 0x4dc + 4da: e0e8 b 0x6ae +; line + 4dc: 0608 lsl r0, r1, #24 + 4de: 0e00 lsr r0, r0, #24 + 4e0: e0e5 b 0x6ae +; line + 4e2: 1c08 mov r0, r1 (add r0, r1, #0) + 4e4: e0e3 b 0x6ae +; high band (1900) + 4e6: 6a54 ldr r4, [r2, #36] ; 0x24 + 4e8: 42a0 cmp r0, r4 + 4ea: d901 bls 0x4f0 + 4ec: 1c05 mov r5, r0 (add r5, r0, #0) + 4ee: e001 b 0x4f4 + 4f0: 2120 mov r1, #32 ; 0x20 + 4f2: 180d add r5, r1, r0 + 4f4: 4b73 ldr r3, =_MIN_TXPWR_PCS ; via 0x6c4 + 4f6: 4974 ldr r1, =_l1a_l1s_com+0x336 ; via 0x6c8 + 4f8: 7809 ldrb r1, [r1, #0] + 4fa: 5c59 ldrb r1, [r3, r1] + 4fc: 42a1 cmp r1, r4 + 4fe: d901 bls 0x504 + 500: 1c0b mov r3, r1 (add r3, r1, #0) + 502: e001 b 0x508 + 504: 2320 mov r3, #32 ; 0x20 + 506: 185b add r3, r3, r1 + 508: 429d cmp r5, r3 + 50a: db12 blt 0x532 +; line + 50c: 42a0 cmp r0, r4 + 50e: d901 bls 0x514 + 510: 1c01 mov r1, r0 (add r1, r0, #0) + 512: e001 b 0x518 + 514: 2120 mov r1, #32 ; 0x20 + 516: 1809 add r1, r1, r0 + 518: 6a13 ldr r3, [r2, #32] ; 0x20 + 51a: 42a3 cmp r3, r4 + 51c: d802 bhi 0x524 + 51e: 2220 mov r2, #32 ; 0x20 + 520: 18d2 add r2, r2, r3 + 522: e000 b 0x526 + 524: 1c1a mov r2, r3 (add r2, r3, #0) + 526: 4291 cmp r1, r2 + 528: d800 bhi 0x52c + 52a: e0c0 b 0x6ae +; line + 52c: 0618 lsl r0, r3, #24 + 52e: 0e00 lsr r0, r0, #24 + 530: e0bd b 0x6ae +; line + 532: 1c08 mov r0, r1 (add r0, r1, #0) + 534: e0bb b 0x6ae +; case GSM850: + 536: 6a54 ldr r4, [r2, #36] ; 0x24 + 538: 42a0 cmp r0, r4 + 53a: d901 bls 0x540 + 53c: 1c05 mov r5, r0 (add r5, r0, #0) + 53e: e001 b 0x544 + 540: 2120 mov r1, #32 ; 0x20 + 542: 180d add r5, r1, r0 + 544: 495d ldr r1, =_MIN_TXPWR_GSM850 ; via 0x6bc + 546: 4b5e ldr r3, =_l1a_l1s_com+0x335 ; via 0x6c0 + 548: 781b ldrb r3, [r3, #0] + 54a: 5ccb ldrb r3, [r1, r3] + 54c: 42a3 cmp r3, r4 + 54e: d901 bls 0x554 + 550: 1c19 mov r1, r3 (add r1, r3, #0) + 552: e001 b 0x558 + 554: 2120 mov r1, #32 ; 0x20 + 556: 18c9 add r1, r1, r3 + 558: 428d cmp r5, r1 + 55a: db12 blt 0x582 +; line + 55c: 42a0 cmp r0, r4 + 55e: d901 bls 0x564 + 560: 1c01 mov r1, r0 (add r1, r0, #0) + 562: e001 b 0x568 + 564: 2120 mov r1, #32 ; 0x20 + 566: 1809 add r1, r1, r0 + 568: 69d3 ldr r3, [r2, #28] ; 0x1c + 56a: 42a3 cmp r3, r4 + 56c: d802 bhi 0x574 + 56e: 2220 mov r2, #32 ; 0x20 + 570: 18d2 add r2, r2, r3 + 572: e000 b 0x576 + 574: 1c1a mov r2, r3 (add r2, r3, #0) + 576: 4291 cmp r1, r2 + 578: d800 bhi 0x57c + 57a: e098 b 0x6ae +; line + 57c: 0618 lsl r0, r3, #24 + 57e: 0e00 lsr r0, r0, #24 + 580: e095 b 0x6ae +; line + 582: 1c18 mov r0, r3 (add r0, r3, #0) + 584: e093 b 0x6ae +; case DUAL: +; case DUAL_EXT: + 586: 68d3 ldr r3, [r2, #12] ; 0xc + 588: 4299 cmp r1, r3 + 58a: d20e bcs 0x5aa +; low band (900) + 58c: 4b4f ldr r3, =_MIN_TXPWR_GSM ; via 0x6cc + 58e: 494c ldr r1, =_l1a_l1s_com+0x335 ; via 0x6c0 + 590: 7809 ldrb r1, [r1, #0] + 592: 5c59 ldrb r1, [r3, r1] + 594: 4288 cmp r0, r1 + 596: db06 blt 0x5a6 +; line + 598: 69d1 ldr r1, [r2, #28] ; 0x1c + 59a: 4288 cmp r0, r1 + 59c: d800 bhi 0x5a0 + 59e: e086 b 0x6ae +; line + 5a0: 0608 lsl r0, r1, #24 + 5a2: 0e00 lsr r0, r0, #24 + 5a4: e083 b 0x6ae +; line + 5a6: 1c08 mov r0, r1 (add r0, r1, #0) + 5a8: e081 b 0x6ae +; high band (1800) + 5aa: 6a54 ldr r4, [r2, #36] ; 0x24 + 5ac: 42a0 cmp r0, r4 + 5ae: d901 bls 0x5b4 + 5b0: 1c05 mov r5, r0 (add r5, r0, #0) + 5b2: e001 b 0x5b8 + 5b4: 2120 mov r1, #32 ; 0x20 + 5b6: 180d add r5, r1, r0 + 5b8: 4b45 ldr r3, =_MIN_TXPWR_DCS ; via 0x6d0 + 5ba: 4943 ldr r1, =_l1a_l1s_com+0x336 ; via 0x6c8 + 5bc: 7809 ldrb r1, [r1, #0] + 5be: 5c59 ldrb r1, [r3, r1] + 5c0: 42a1 cmp r1, r4 + 5c2: d901 bls 0x5c8 + 5c4: 1c0b mov r3, r1 (add r3, r1, #0) + 5c6: e001 b 0x5cc + 5c8: 2320 mov r3, #32 ; 0x20 + 5ca: 185b add r3, r3, r1 + 5cc: 429d cmp r5, r3 + 5ce: db11 blt 0x5f4 +; line + 5d0: 42a0 cmp r0, r4 + 5d2: d901 bls 0x5d8 + 5d4: 1c01 mov r1, r0 (add r1, r0, #0) + 5d6: e001 b 0x5dc + 5d8: 2120 mov r1, #32 ; 0x20 + 5da: 1809 add r1, r1, r0 + 5dc: 6a13 ldr r3, [r2, #32] ; 0x20 + 5de: 42a3 cmp r3, r4 + 5e0: d802 bhi 0x5e8 + 5e2: 2220 mov r2, #32 ; 0x20 + 5e4: 18d2 add r2, r2, r3 + 5e6: e000 b 0x5ea + 5e8: 1c1a mov r2, r3 (add r2, r3, #0) + 5ea: 4291 cmp r1, r2 + 5ec: d95f bls 0x6ae +; line + 5ee: 0618 lsl r0, r3, #24 + 5f0: 0e00 lsr r0, r0, #24 + 5f2: e05c b 0x6ae +; line + 5f4: 1c08 mov r0, r1 (add r0, r1, #0) + 5f6: e05a b 0x6ae +; case DCS1800: + 5f8: 6a54 ldr r4, [r2, #36] ; 0x24 + 5fa: 42a0 cmp r0, r4 + 5fc: d901 bls 0x602 + 5fe: 1c05 mov r5, r0 (add r5, r0, #0) + 600: e001 b 0x606 + 602: 2120 mov r1, #32 ; 0x20 + 604: 180d add r5, r1, r0 + 606: 4932 ldr r1, =_MIN_TXPWR_DCS ; via 0x6d0 + 608: 4b2d ldr r3, =_l1a_l1s_com+0x335 ; via 0x6c0 + 60a: 781b ldrb r3, [r3, #0] + 60c: 5cc9 ldrb r1, [r1, r3] + 60e: 42a1 cmp r1, r4 + 610: d901 bls 0x616 + 612: 1c0b mov r3, r1 (add r3, r1, #0) + 614: e001 b 0x61a + 616: 2320 mov r3, #32 ; 0x20 + 618: 185b add r3, r3, r1 + 61a: 429d cmp r5, r3 + 61c: db11 blt 0x642 +; line + 61e: 42a0 cmp r0, r4 + 620: d901 bls 0x626 + 622: 1c01 mov r1, r0 (add r1, r0, #0) + 624: e001 b 0x62a + 626: 2120 mov r1, #32 ; 0x20 + 628: 1809 add r1, r1, r0 + 62a: 69d3 ldr r3, [r2, #28] ; 0x1c + 62c: 42a3 cmp r3, r4 + 62e: d802 bhi 0x636 + 630: 2220 mov r2, #32 ; 0x20 + 632: 18d2 add r2, r2, r3 + 634: e000 b 0x638 + 636: 1c1a mov r2, r3 (add r2, r3, #0) + 638: 4291 cmp r1, r2 + 63a: d938 bls 0x6ae +; line + 63c: 0618 lsl r0, r3, #24 + 63e: 0e00 lsr r0, r0, #24 + 640: e035 b 0x6ae +; line + 642: 1c08 mov r0, r1 (add r0, r1, #0) + 644: e033 b 0x6ae +; case PCS1900: + 646: 6a54 ldr r4, [r2, #36] ; 0x24 + 648: 42a0 cmp r0, r4 + 64a: d901 bls 0x650 + 64c: 1c05 mov r5, r0 (add r5, r0, #0) + 64e: e001 b 0x654 + 650: 2120 mov r1, #32 ; 0x20 + 652: 180d add r5, r1, r0 + 654: 4b1b ldr r3, =_MIN_TXPWR_PCS ; via 0x6c4 + 656: 491a ldr r1, =_l1a_l1s_com+0x335 ; via 0x6c0 + 658: 7809 ldrb r1, [r1, #0] + 65a: 5c59 ldrb r1, [r3, r1] + 65c: 42a1 cmp r1, r4 + 65e: d901 bls 0x664 + 660: 1c0b mov r3, r1 (add r3, r1, #0) + 662: e001 b 0x668 + 664: 2320 mov r3, #32 ; 0x20 + 666: 185b add r3, r3, r1 + 668: 429d cmp r5, r3 + 66a: db11 blt 0x690 +; line + 66c: 42a0 cmp r0, r4 + 66e: d901 bls 0x674 + 670: 1c01 mov r1, r0 (add r1, r0, #0) + 672: e001 b 0x678 + 674: 2120 mov r1, #32 ; 0x20 + 676: 1809 add r1, r1, r0 + 678: 69d3 ldr r3, [r2, #28] ; 0x1c + 67a: 42a3 cmp r3, r4 + 67c: d802 bhi 0x684 + 67e: 2220 mov r2, #32 ; 0x20 + 680: 18d2 add r2, r2, r3 + 682: e000 b 0x686 + 684: 1c1a mov r2, r3 (add r2, r3, #0) + 686: 4291 cmp r1, r2 + 688: d911 bls 0x6ae +; line + 68a: 0618 lsl r0, r3, #24 + 68c: 0e00 lsr r0, r0, #24 + 68e: e00e b 0x6ae +; line + 690: 1c08 mov r0, r1 (add r0, r1, #0) + 692: e00c b 0x6ae +; case GSM: +; case GSM_E: + 694: 4b0d ldr r3, =_MIN_TXPWR_GSM ; via 0x6cc + 696: 490a ldr r1, =_l1a_l1s_com+0x335 ; via 0x6c0 + 698: 7809 ldrb r1, [r1, #0] + 69a: 5c59 ldrb r1, [r3, r1] + 69c: 4288 cmp r0, r1 + 69e: db05 blt 0x6ac +; line + 6a0: 69d1 ldr r1, [r2, #28] ; 0x1c + 6a2: 4288 cmp r0, r1 + 6a4: d903 bls 0x6ae +; line + 6a6: 0608 lsl r0, r1, #24 + 6a8: 0e00 lsr r0, r0, #24 + 6aa: e000 b 0x6ae +; line + 6ac: 1c08 mov r0, r1 (add r0, r1, #0) +; line + 6ae: bd30 pop {r4, r5, pc} +; End function + +Conclusion: the logic contained in the above disassembly is exactly the same +as in the available C code, but there must have been some change to the code +expression that results in different output from the compiler.