Skip to content

Warning: missing operand; zero assumed spam with BigInt arithmetic on volatile variable #622

Description

@tersec

Running nim c --lineDir:on --passC:-flto --passL:-flto f.nim on

import constantine/math/arithmetic/bigints
import constantine/math/io/io_bigints

var v: array[2, BigInt[256]]
v[0].fromUint(0x9e3779b97f4a7c15'u64)
v[1].fromUint(0xc2b2ae3d27d4eb4f'u64)
var b {.volatile.} = 0
var r: BigInt[512]
r.prod(v[b], v[1 - b])

Results in warning spam:

CC: system/exceptions.nim
CC: std/private/digitsutils.nim
CC: system/dollars.nim
CC: system.nim
CC: constantine/platforms/isa_x86/cpudetect_x86.nim
CC: constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim
CC: constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim
CC: constantine/serialization/io_limbs.nim
CC: f.nim
Hint:  [Link]
/tmp/cckYdRng.s: Assembler messages:
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:110: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:110: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:116: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:124: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:124: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:129: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:129: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:130: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:135: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:143: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:143: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:148: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:148: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:149: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:153: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:153: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:154: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:159: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:167: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:167: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:168: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:172: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:172: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:173: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:177: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:177: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:178: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:186: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:186: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:187: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:191: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:191: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:192: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:200: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:200: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86.nim:201: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim:173: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim:175: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim:177: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim:182: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim:182: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim:188: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim:191: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim:194: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim:201: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim:201: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim:207: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim:210: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim:213: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim:220: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim:220: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim:226: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim:229: Warning: missing operand; zero assumed
/tmp/constantine/constantine/math/arithmetic/assembly/limbs_asm_mul_x86_adx_bmi2.nim:232: Warning: missing operand; zero assumed

Versions:

Nim Compiler Version 2.2.10 [Linux: amd64]
Compiled at 2026-06-18
Copyright (c) 2006-2026 by Andreas Rumpf

git hash: bfeb3146d1638b39f69007a4ae5a23e23ae4e5ef
active boot switches: -d:release

with

gcc (Debian 15.3.0-1) 15.3.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions