Try compiling with -O0

(On MSVC) /O0 is the same as /Od and results in the same assembler output shown above right down to the annotation: ; Function compile flags: /Odtp.

that usually forces auto variables to stack

On (Windows) X64, the ABI designates that the first 4 args are passed in registers and the others on the stack.

But that requires that there would be arguments passed. Whilst == is implemented as a (kind of) function call in Perl; it is not in C -- on any platform/compiler I am aware of.

Even the integer C interpreter I had back in the day loaded one value into a register and the did a cmp reg, mem; instruction.

may load small constants like so: pushq $18; popq %rdi.

I'm not familiar with those style of opcodes -- they don't appear in my Intel manuals -- but assuming the 'q' in pushq/popq stands for quad (in 64-bit mode that's the only push/pop available), and this is a "small constant"; why does it store that small constant in a 64-bit memory location, then move it into a 64-bit register by moving it through another 64-bit memory location (on the stack) first?

Why not use (in Intel Asm syntax) mov rdi, $18; (register to memory 64-bit move)?

Or better yet, mov reg8/16/32/64, imm8/16/32/64;?

Ie. store the small constant directly in the opcode itself; per this from the listing above: sub    eax, 1;

(Note:I've never used Intel's compiler.)


With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority". I'm with torvalds on this
In the absence of evidence, opinion is indistinguishable from prejudice. Agile (and TDD) debunked

In reply to Re^6: Help me to understand increment / decrement operator behavior in perl by BrowserUk
in thread Help me to understand increment / decrement operator behavior in perl by sam_bakki

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.