add simd::ifh, using 'icmp slt' and 'select'. Also tried to refactor func gener