Thanks for reporting.
Actual result should be the following:
import numpy as np
x = np.array([3, 9, 30, 14, 4, 22, 11, 7, 5], dtype=np.int32)
w = np.array([17, 21, -59, -4, -10, -31, 2, -3, 59], dtype=np.int32)

dotP = np.dot(x, w)
result = round(dotP / c.scale)
print(dotP)
print(result)

-2012
-63

Will check if it’s a bug. I don’t see any kind of overflow or saturation issue with these xq and Wq.