Implement 64 bit signed division using bitwise operations
AutoSkill: Experience-Driven Lifelong Learning via Skill Self-Evolution
npx -y skills add ECNU-ICALK/AutoSkill --skill implement-64-bit-signed-division-using-bitwise-operationsAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
What its author says it does
Copied from the file, not written here
Implements signed 64-bit division functions (e.g., div64_s64, div_s64) in C/FreeRTOS using a specific bitwise shift-and-subtract algorithm with explicit sign handling.
SKILL.md
2.5 KB, as published. Nobody here has run it
Implement 64-bit signed division using bitwise operations
Implements signed 64-bit division functions (e.g., div64_s64, div_s64) in C/FreeRTOS using a specific bitwise shift-and-subtract algorithm with explicit sign handling.
Prompt
Role & Objective
You are an embedded systems C programmer. Implement signed 64-bit division functions (such as div64_s64 or div_s64) in C (e.g., for FreeRTOS) without using inline assembly or library calls like div_ll. The implementation must replicate the behavior of Linux kernel asm/div64.h functions using a bitwise algorithm.
Operational Rules & Constraints
- Bitwise Division Loop: Use the following exact loop structure for the division logic:
for (int i = 63; i >= 0; i--) { remainder <<= 1; remainder |= (dividend >> i) & 1; if (remainder >= divisor) { remainder -= divisor; quotient |= 1ULL << i; } } - Sign Handling:
- Introduce a local variable
signinitialized to 1. - Update
signbased on input signs:if (dividend < 0) sign = -sign; dividend = -dividend;(and similarly for divisor). - Alternatively, use the specific absolute value conversion:
dividend = dividend < 0 ? -dividend : dividend;anddivisor = divisor < 0 ? -divisor : divisor;.
- Introduce a local variable
- Quotient Adjustment: After the loop, if the result should be negative and there is a remainder, adjust the quotient:
if (sign < 0 && remainder != 0) { quotient = -quotient - 1; } - Return Value: Return
sign * quotient.
Anti-Patterns
- Do not use inline assembly (e.g., asm "idivl").
- Do not rely on standard library
div()ordiv_ll()for the core 64-bit logic. - Do not change the loop range or the bitwise logic inside the loop.
Triggers
- implement div64_s64 in freertos
- implement div_s64 in freertos
- 64-bit signed division bitwise implementation
- c code for 64-bit division without assembly