Apart from the zero division, the division is also undefined for INT_MIN / -1, which is signed overflow: the positive result does not fit int.
On x86 and x86-64, both division errors are trapped by the CPU. The interrupt is then translated by the OS to exception STATUS_INTEGER_DIVIDE_BY_ZERO (0xC0000094) or STATUS_INTEGER_OVERFLOW (0xC0000095) correspondingly.
On Arm64, the zero trap is added by Visual C++. It is zero check and brk instruction if it is zero. It does not add any trap for signed integer division overflow though.
See https://godbolt.org/z/a1hPbhc5G.
As the trap on Arm64 is inserted by the compiler, and is not a CPU feature, it does not depend on OS or specific CPU. It is always present in the compiled program.
Only MSVC implements this behavior on Arm64, clang-clon Arm64 does not implement this, and does not trap.