diff --git a/include/libnux/vx/time.h b/include/libnux/vx/time.h
index 7d0a3fec8b4c2f8759dabf6c9679ea17e067426c..7d55241c5a5716d79762195e045c1fa40b29cd4f 100644
--- a/include/libnux/vx/time.h
+++ b/include/libnux/vx/time.h
@@ -12,6 +12,12 @@ namespace libnux::vx {
 
 constexpr static uint32_t default_ppu_cycles_per_us = 250;
 
+/*
+ * Idle for (approx.) `cycles` cycles.
+ *
+ * The current implementation uses a narrowing conversion of the user-supplied parameter to
+ * 'int32_t'. Values that don't fit in this data type will wrap.
+ */
 void sleep_cycles(uint32_t cycles) ATTRIB_LINK_TO_INTERNAL;
 
 /*
diff --git a/src/libnux/vx/time.cpp b/src/libnux/vx/time.cpp
index 402642b87c11abfeb9883209500ef91fe47a214d..1556ae86ce31e259c342097b6bcc45507a9369cf 100644
--- a/src/libnux/vx/time.cpp
+++ b/src/libnux/vx/time.cpp
@@ -3,15 +3,13 @@
 
 namespace libnux::vx {
 
-/*
-	Idle for (approx.) `cycles` cycles.
-*/
 void __attribute__((optimize("O2"))) sleep_cycles(uint32_t cycles)
 {
-	static const uint8_t offset = 9;
+	static const int8_t offset = 9;
 	time_base_t start;
 	start = get_time_base();
-	while ((uint32_t)(get_time_base() - start) <= (cycles - offset));
+	while ((int32_t)(get_time_base() - start) <= (static_cast<int32_t>(cycles) - offset))
+		;
 }
 
 time_base_t now()