works well on x86 paltform