https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92041

            Bug ID: 92041
           Summary: m68k optimizations (-O2, -O3 or -Ofast) generates
                    wrong code
           Product: gcc
           Version: 9.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: djipi.mari at gmail dot com
  Target Milestone: ---
              Host: x86
            Target: m68k-elf

This code:
void *calloc(size_t num_elements, size_t size)
{
        void *ptr = malloc(num_elements*size);

        if (ptr)
        {
                memset(ptr, 0, (num_elements*size));
        }

        return  ptr;
}

Generates this assembly when using -O2, -O3 or -Ofast:
calloc:
        move.l 8(%sp),%d0
        moveq #1,%d1
        move.l %d1,8(%sp)
        move.l %d0,-(%sp)
        move.l 8(%sp),-(%sp)
        jsr __mulsi3
        addq.l #8,%sp
        move.l %d0,4(%sp)
        jra calloc

The issue appears since the 9.1.0, previous versions do not have such issues.

Reply via email to