((short)2)
Да, это не совсем короткий литерал, скорее это приведенный int, но поведение такое же, и я думаю, что нет прямого способа сделать это.
Я этим и занимался, потому что ничего не мог найти об этом. Я бы предположил, что компилятор был бы достаточно умен, чтобы скомпилировать это, как если бы это был короткий литерал (т.е. он фактически не выделял бы int, а затем приводил бы его каждый раз).
Следующее показывает, насколько вам следует об этом беспокоиться:
a = 2L;
b = 2.0;
c = (short)2;
d = '\2';
Скомпилировать -> разобрать ->
movl $2, _a
movl $2, _b
movl $2, _c
movl $2, _d