add sem function