#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>

int32_t imul(int16_t x, int16_t y)
{
    #define u(x) ((uint32_t)(x))
    #define s(x) ((int32_t)(x))
    return ((u(abs(x)) * u(abs(y))) ^ ((x ^ y) >> 15)) + (u(x ^ y) >> 31);
}

int main(void)
{
    printf("%d\n", imul(-32768, -32768));
    return 0;
}