The \3 codes switch between word and dword, based on address size.
They are used for far JMPs and far CALLs, the A0-A3 MOVs, and the 68 PUSH imm.
While the displacements of those MOVs do depend of the address size, the offsets
of those far JMPs and far CALLs, as well as the immediate of that PUSH do depend
on operand size, not address size.
The following example demonstrates the problem for the far JMPs and far CALLs:
; assemble this with -f obj
call far dword label
; emits 66h, but word offset
call far word label
; emits 66h, but dword offset
To fix this problem, I suggest to clone \4 from \3, so that one of the two can
look at address size, and the other one at operand size.
PS: The 68 PUSH imm case doesn't show up, because it is preceded by an explicit
imm16 case and an explicit imm32 case in the instruction database -- and those two
go through a different set of codes.