📄 memcmp.s
字号:
TEXT memcmp(SB), $0#define BDNZ BC 16,0, MOVW R3, s1+0(FP) /* R3 is pointer1 *//* * performance: * 67mb/sec aligned; 16mb/sec unaligned */ MOVW n+8(FP), R4 /* R4 is count */ MOVW s2+4(FP), R5 /* R5 is pointer2 *//* * let LSW do the work for 4 characters or less; aligned and unaligned */ CMP R4, $0 BLE eq CMP R4, $4 BLE out XOR R3, R5, R9 ANDCC $3, R9 BNE l4 /* pointers misaligned; use LSW loop *//* * do enough bytes to align pointers */ ANDCC $3,R3, R9 BEQ l2 SUBC R9, $4, R9 MOVW R9, XER LSW (R3), R10 ADD R9, R3 LSW (R5), R14 ADD R9, R5 SUB R9, R4 CMPU R10, R14 BNE ne/* * compare 16 at a time */l2: SRAWCC $4, R4, R9 BLE l4 MOVW R9, CTR SUB $4, R3 SUB $4, R5l3: MOVWU 4(R3), R10 MOVWU 4(R5), R12 MOVWU 4(R3), R11 MOVWU 4(R5), R13 CMPU R10, R12 BNE ne MOVWU 4(R3), R10 MOVWU 4(R5), R12 CMPU R11, R13 BNE ne MOVWU 4(R3), R11 MOVWU 4(R5), R13 CMPU R10, R12 BNE ne CMPU R11, R13 BNE ne BDNZ l3 ADD $4, R3 ADD $4, R5 RLWNMCC $0, R4, $15, R4 /* residue */ BEQ eq/* * do remaining words with LSW; also does unaligned case */l4: SRAWCC $2, R4, R9 BLE out MOVW R9, CTRl5: LSW (R3), $4, R10 ADD $4, R3 LSW (R5), $4, R11 ADD $4, R5 CMPU R10, R11 BNE ne BDNZ l5 RLWNMCC $0, R4, $3, R4 /* residue */ BEQ eq/* * do remaining bytes with final LSW */out: MOVW R4, XER LSW (R3), R10 LSW (R5), R11 CMPU R10, R11 BNE neeq: MOVW $0, R3 RETURNne: MOVW $1, R3 BGE ret MOVW $-1,R3ret: RETURN END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -