agentsclimarketplace

Implement 64 bit signed division using bitwise operations

Skill ECNU-ICALK/AutoSkill/SkillBank/ConvSkill/english_gpt3.5_8/implement-64-bit-signed-division-using-bitwise-operations

AutoSkill: Experience-Driven Lifelong Learning via Skill Self-Evolution

Install
npx -y skills add ECNU-ICALK/AutoSkill --skill implement-64-bit-signed-division-using-bitwise-operations

Assembled 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

  1. 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;
        }
    }
    
  2. Sign Handling:
    • Introduce a local variable sign initialized to 1.
    • Update sign based 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; and divisor = divisor < 0 ? -divisor : divisor;.
  3. 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;
    }
    
  4. Return Value: Return sign * quotient.

Anti-Patterns

  • Do not use inline assembly (e.g., asm "idivl").
  • Do not rely on standard library div() or div_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

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.